1.Node.js官方提供的原生模块 —— querystring
querystring模块用于处理HTTP请求URL中的查询字符串var obj =qs.parse(str) 把查询字符串解析为JS对象
const qs = require("querystring"); //console.log(qs) var str = 'uname=tom&upwd=1234&pno=3&kw=%E5%AD%A6%E4%B9%A0';//查询字符串 var obj = qs.parse(str); console.log(obj);//{ uname: 'tom', upwd: '1234', pno: '3', kw: '学习' } console.log(obj.kw);//学习
var str = qs.stringify(obj) 把JS对象转换为查询字符串
var obj2 = {ename:"gemini",age:21,addr:"bj"}; var str2 = qs.stringify(obj2); console.log(str2);//ename=gemini&age=21&addr=bj
2.Node.js官方提供的原生模块 —— url
url模块用于解析一个HTTP请求地址,获取其中各个不同的部分
var obj = url.parse( str ) 把一个URL字符串解析为一个对象
var obj = url.parse(str, true ) 把一个URL字符串解析为一个对象,并把其中的查询字符串也解析为对象
const url = require("url"); //console.log(url); var u = "https://qd:123@www.jd.com:443/ad/index?uname=gemini&pno=3#chapter3"; var obj1 = url.parse(u); console.log(obj1); var obj2 = url.parse(u,true); console.log(obj2.query.uname);//gemini
3.Node.js官方提供的原生模块 —— Buffer
Buffer:缓冲区,本质是一块内存区域,用于暂存以后要用到的数据(可能是数字、字符串、二进制图片/音视频等),该区域就称为“缓存”。
CPU——>内存中缓存区——>硬盘
//分配一个指定大小的缓冲区
var buf1 = Buffer.alloc( 1024 );
//使用一个数字数组创建一个缓冲区
var buf2 = Buffer.from( [1, 3, 5] );
//使用一个字符串创建一个缓冲区
var buf3 = Buffer.from( 'abcdefg' );
//把一个缓冲区中的数据转换为字符串
var str = buf3.toString( );
//Buffer是全局模块,无需引用可以直接使用 var buf = Buffer.alloc(10);//分配10个字节大小的缓存区用于缓存数据,1字节=8比特位 console.log(buf); var buf2 = Buffer.alloc(1024*3);//3KB console.log(buf2); console.log(buf2.length); var buf5 = Buffer.from("一二三"); console.log(buf5);//一个汉字3个字节,一个UTF8汉字转成unicode码占3个字节 console.log(buf5.toString()); var buf3 = Buffer.from(['a','b','c']); console.log(buf3);//<Buffer 00 00 00> var buf4 = Buffer.from([1,2,3]); console.log(buf4);//<Buffer 01 02 03>将数字初始化到了内存 var buf44 = Buffer.from('abcd'); console.log(buf44);//<Buffer 61 62 63 64>a的Unicode码是97,十六进制61<=>十进制97(在calc中使用程序员计算器计算)
4. Node.js官方提供的原生模块 —— fs
fs模块提供了对文件系统中的文件/目录进行增删改查、读写的功能。
//同步读取文件中的内容
var data =fs.readFileSync( file );
//同步向文件中写出内容(删除已有内容)
fs.writeFileSync(file, str/buf )
//同步向文件中追加写出内容(不删除已有内容)
fs.appendFileSync(file, str/buf )
练习:使用上述方法,实现把 4.css 文件复制为 4.backup.css
var data = fs.readFileSync('./public/1.html'); var str = new Date().toString(); fs.appendFileSync('./public/3.log',str); var data = fs.readFileSync('./public/4.css'); fs.writeFileSync('./public/4.backup.css',data);
//异步读取文件中的内容
fs.readFile( file, function(err, data){ } );
//异步向文件中写出内容(删除已有内容)
fs.writeFile(file, str/buf, function(err){ } )
练习:使用异步方法,实现把 4.css 文件复制为 44.backup.css
const fs = require('fs'); console.log('Starting read file...'); fs.readFile('./public/4.css',function(err,data){ if(err){ console.log('Faile to read file!'); console.log(err); }else { console.log(data.toString()); console.log('2file read finish'); fs.writeFile('./public/44.backip.css',data,function(err){ console.log('File write finish!'); }); } });
提示:文件读写可以使用同步或异步,但推荐使用异步方法——最大限度的发挥Node.js的优势。
7.Node.js官方提供的原生模块—— http
HTTP模块可用于编写基于HTTP协议的客户端程序(即浏览器);也可以编写基于HTTP协议的服务器端程序(即Web服务器)
用http模块编写一个Web服务器:
(1)接收客户端的HTTP请求消息
(2)解析客户端请求消息
(3)读取客户端请求的文件
(4)向客户端发送HTTP响应消息,主体就是客户端请求的文件
var server =http.createServer( );
server.listen(80);
server.on('request', function(req,res){
//解析请求消息
//向客户端写出响应消息
})