Node.js 核心模块详解

一、工具模块
(1)querystring模块
querystring模块提供了处理URL中查新字符串部分的相关操作。

parse      //把查询字符串解析为对象
stringify  //把对象转换成查询字符串

详细案例

/把查询字符串解析为对象
var querystring = require('querystring');
//声明一个查询字符串
var urlStr = 'eid=3&name=张三&phone=18112345678';
//使用querystring模块中方法解析
var obj = querystring.parse(urlStr);
console.log(obj);  //{ eid: '3', name: '张三', phone: '18112345678' }

//把对象转换成查询字符串
var animal = {
  name:'小白',
  color:'white',
  age:3
};
var str = querystring.stringify(animal);
console.log(str);  //name=%E5%B0%8F%E7%99%BD&color=white&age=3

(2)url模块
url模块提供了处理URL中不同部分的相关操作。

parse   //把url解析为对象
format  //把对象转换为字符串

详细案例

//引入URL模块
const url = require('url');
//对一个路径解析
var urlStr = 'http://www.tmooc.cn/home/index.html?name=tom&age=18';  //查询字符串在?后面
var res = url.parse(urlStr);
//console.log(res);
//找到查询字符串
//console.log(res.query);  // //name=tom&age=18

var obj = {
  protocol:'http:',  //协议
  hostname:'www.codeboy.com',  //主机名
  pathname:'/list/1'  //路径
};
//把对象转换成url
var str = url.format(obj);
console.log(str);  //http://www.codeboy.com/list/1

二、fs模块
fs模块是Node.js核心模块之一,提供了文件的读写,更名,删除,遍历目录等 操作。
操作有同步和异步两种形式:
--同步函数:阻塞模式,是通过返回值的形式来获取结果。
--异步函数:非阻塞模式,是通过回调函数的形式来获取结果。 

(1)方法

stat/statSync             //查看文件的状态 
isDirectory()/isFile()    //是否为目录/文件

案例解析

const fs = require('fs');
console.log(1);   //1
//查看当前目录下1.txt文件的状态
//异步查看文件状态
fs.stat('./1.txt',(err,stat)=>{
  //err--错误对象  
  //console.log(err);  //null
  //console.log(stat); //打印Stats对象列表
  //查看是否为目录
  //console.log(stat.isDirectory);  //[Function]
  //是否为文件
  //console.log(stat.isFile());  //true
  console.log(2);    //2
});

//同步查看文件状态
var res = fs.statSync('./1.txt');
console.log(res);   //Stats对象列表
console.log(3);   //3
//1 ——> Stats对象列表 ---> 3 --> 2   => stat为异步函数,statSync为同步函数
mkdir       //创建目录
rmdir       //删除目录

案例详解

const fs = require('fs');
//创建目录
fs.mkdir('./myDir',(err)=>{
});

//删除目录
fs.rmdir('./myDir',(err)=>{
  //如果有错误
  if(err){
    throw err;
  }
  console.log('删除成功');
});

练习:查看一个目录的状态,如果不存在这个目录,尝试创建这个目录。

const fs = require('fs');
fs.stat('./myDir',(err,stat)=>{
  //console.log(err);
  if(err){
    //创建目录
	fs.mkdir('./myDir',(err)=>{
	 console.log(err);
	});
  };
});
readdir   //读取目录,返回一个数组
readFile  //读取文件,返回一个buffer形式的数据,可以toString()转换成普通的数据

案例详解

//读取目录
const fs = require('fs');
fs.readdir('./lianxi',(err,files)=>{
  console.log(files);
});

//读取文件
const fs = require('fs');
fs.readFile('./1.txt',(err,data)=>{
  if(err){
    throw err;
  };
  //data读取的结果是buffer形式的数据
  console.log(data); //<Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>
  console.log(data.toString());  //文件中写的代码 如:hello world
});
writeFile  //写入文件,如果不存在,具有创建文件的功能,文件中已经有内容,会先清空,再写入。
appendFile  //追加写入文件,如果不存在,会创建文件,文件中已经有内容,在末尾追加写入。
//清空写入文件/创建文件
const fs = require('fs');
//如果文件已经存在,先清空文件中的内容,然后写入
fs.writeFile('./data.txt','tom',(err)=>{
  //如果写入成功(没有错误),打印消息
  if(!err){
    console.log('写入成功');  //写入成功
    //data.txt文件中写入:tom
  };
});

//追加写入文件/创建文件
const fs = require('fs');
fs.appendFile('./data.txt','tom\n',(err)=>{
  if(!err){
    console.log('追加写入成功');  //追加写入成功
	//data.txt文件中写入:
	//tom
    //tom
	//...
  };
});

练习:计算器功能,每访问一次,数字加1,把文件储存在文件num.txt

思路:
①如果文件不存在,创建num.txt,初始化里面的值为0
②读取num.txt,把读取的结果+1,并打印出来
③把+1的结果再次保存在num.txt中

const fs = require('fs');
var filename = './num.txt';
//1.判断是否存在num.txt
fs.stat(filename,(err,stat)=>{
  //如果不存在
  if(err){
    fs.writeFile(filename,0,(err)=>{
	  
	});
  };
});
//2.读取num.txt,把读取的内容+1
fs.readFile(filename,(err,data)=>{
  //读取的结果执行+1
  var n = data.toString();
  n++;
  //3.把+1的结果写入到num.txt中
  fs.writeFile(filename,n,(err)=>{
    console.log(n);
  });
});
unlink    //删除文件
//删除文件
const fs = require('fs');
fs.unlink('./num.txt',(err)=>{
  //如果没有错误,打印删除成功
  if(!err){
    console.log('删除成功');
  };
});

三、HTTP模块
http协议基于“请求-响应”的模式。
http的请求方法用于从服务器端获取指定资源,常见的请求方法有:
    --GET:表示客户端想获取服务器上的指定资源
    --POST:表示客户端想向服务器“传递并保存”数据
    --PUT:一般用于表示客户端想向服务器“传递并更新”数据
    --DELETE:一般表示客户端想从服务器“删除”指定数据

(1)相应状态码
1**:请求-响应进行中
2**:成功的响应
3**:响应重定向到其他的网址
4**:客户端请求错误
5**:服务器端运行错误 

相关练习:使用http模块向url(http://www.codeboy.com)发请求,把请求的结果写入到web.txt中。

//引入模块
const http=require('http');
const fs=require('fs');
//1.使用http作为客户端发请求
var url = 'http://www.codeboy.com';
http.get(url,(res)=>{
  //获取响应的主体
  res.on('data',(buf)=>{
    //2.把响应的主体写入到文件中
    fs.appendFile('./web.txt',buf,(err)=>{
      if(!err){
        console.log('写入成功');
      };
    });
  },);
});

(2)使用http模块创建web服务器

const http = require('http');
//1.创建服务器
var server = http.createServer();
//监听端口的变化
server.listen(3000,()=>{
  console.log('创建服务器成功');
});
//2.接收客户端请求
server.on('request',(req,res)=>{
  //req--请求的对象
  //res--响应的对象
  console.log('接收到http请求');
  //console.log(req);  //好多信息
  //console.log(res);  //null
  console.log('请求的方法为:'+req.method);  //默认get
  console.log('请求的url:'+req.url);        //端口后的字符串
  console.log('请求的头信息:'+req.headers); 
});
const http = require('http');
//1.创建服务器
var server = http.createServer();
//监听端口的变化
server.listen(3000,()=>{
  console.log('创建服务器成功');
});
//2.接收客户端请求
server.on('request',(req,res)=>{
  console.log('客户端发出请求');
  //服务器做出响应
  //设置响应的头信息
  res.writeHead(200,{
    'Server':'web1806',
    'Content-Type':'text/html'
  });
  //响应到浏览器中
  res.write('this is web1806 server');
  //结束响应
  //将响应的消息发给客户端
  res.end();
const http = require('http');
//1.创建服务器
var server = http.createServer();
//监听端口的变化
server.listen(3000,()=>{
  console.log('创建服务器成功');
});
//2.接收客户端请求
server.on('request',(req,res)=>{
  console.log('客户端发出请求');
  //服务器做出响应
  //重定向到其他服务器
  res.writeHead(301,{
    'Location':'http://www.tmooc.cn/'
  });
  //结束响应
  //将响应的消息发给客户端
  res.end();
});


上一篇: Node.js 包和NPM
下一篇: Node.js express概述
作者邮箱: 203328517@qq.com