最近一段时间工作不是很忙,抽空学习了一下node相关的知识,打算接下来学习一下VUE框架,配合VUE框架做一个小Demo。下面是小编总结的node中几个常用的模块。
Node中的模块分为三种类型:
- node天生自带的模块(核心模块);
- node的第三方模块;通过npm包管理器下载的模块;
- 自定义模块(即自己写的js文件;在node环境中运行的js文件,一个文件就是一个模块)。
模块导入:
- require导入一个模块;如果是同级的自定义模块,必须加上‘./’;
- 如果文件的后缀名是.js、.json文件,那么可以省略后缀名;
- Require这个方法不在全局的对象global中;
- Require导入的模块会将模块中的代码从上到下执行。
模块导出:(module.exports/exports)
- 把当前模块中的内容进行暴露,让其他模块可以使用;
- Module.exports可以用其他的空间地址进行覆盖;exports不能用其他的空间覆盖,只能给其新增属性;
- Module.exports不仅支持空间地址,还支持基本数据类型。
在每个自定义模块的最外层,会默认添加一个闭包的函数,这个函数中会接收五个参数:
Exports:将当前模块的属性和方法导出;
__dirname:当前文件的父级目录的绝对路径;
__filename:当前文件的绝对路径
(function (module,exports,require,__dirname,__filename){
})()
fs模块
let fs = require(“fs”); // 引入模块
fs.readFile(path,option,callback); // 异步读取文件
// path:当前读取文件的路径
// option:读出来数据的编码格式
// callback:回调函数;该函数有两个参数:第一个参数代表错误信息;如果没有错误,那么默认值是null;第二个参数是读出来的数据,默认是undefined。
Fs.readFileSync(path,option); // 同步读取文件;读出来的数据默认是一个JSON格式的字符串;可以通过JSON.parse转成数组
Fs.writeFile(path,data,option,callback); // 异步写入文件;当异步写入成功之后,执行这个回调;新的数据会将老的数据进行覆盖
Fs.writeFileSync(path,data,option); // 同步写入文件
Fs.appendFile(path,data,option,callback); // 向文件的末尾追加内容;如果文件路径不存在,那么会默认创建一个文件,并且把文件内容写进去;会默认的调用toString方法,将其他的数据类型转成字符串
http模块
let http = require(‘http’);
let server = http.createServer(function(req,res){ // 请求一次,该函数执行一次
// req:请求信息;当客户端请求时,会把当前请求的信息放入到这个参数中
// res:响应信息;
Console.log(req.path); // 这个是路径
Console.log(req.path); // 这个是参数
Console.log(req.path); // 主机域名
Console.log(req.path); // 返回当前路径的参数
Res.setHeader(‘Content-Type’,’text/plain;charset=utf-8’); // 设置响应头,告诉浏览器按照什么类型进行解析和渲染
res.end(‘this is a string’); // 1、结束当前请求;2、把后端整理的数据返回给客户端,数据是字符串或者buffer类型的
}
// 端口号:0-65535; http默认端口号是80,HTTPS默认端口号是443
// 让当前的服务监听8000这个端口;当客户端访问8000端口时,会触发当前server的回调函数;
Server.listen(8000,function(){
// 该回调函数只在端口成功启动时执行一次,启动失败不执行
Console.log(‘端口启动成功’);
});
Url模块
let http = require(‘http’);
let url = require(‘url);
http.createServer(function(){
// url.parse:用来处理路径的,pathname:当前的路径;query:参数组合的对象
let {pathname,query} = url.parse(req.url,true);
}).listen(8000,function(){
Console.log(‘端口启动成功’);
})
Mime模块
Let mime = require(‘mime’);
let http = require(‘http’);
let url = require(‘url);
http.createServer(function(){
// url.parse:用来处理路径的,pathname:当前的路径;query:参数组合的对象
let {pathname,query} = url.parse(req.url,true);
// mime有个getType方法的返回值是当前文件对应的mime类型
// 解决了不同的文件类型设置不同的响应头
res.setHeader(‘Content-Type’,mime.getType(pathname));
}).listen(8000,function(){
Console.log(‘端口启动成功’);
})
常见的Mime类型
.html text/html
.css text/css
.txt text/plain
.js application/javascript
.json application/json
.png image/png
.jpg image/jpeg
Express模块
Let express= require(‘express);
Let app = express(); // express执行相当于创建一个服务
App.get(‘/listen’,function(req,res){
Res.send(‘get’);
})
App.post(‘/listen2’,function(req,res){
Res.send(‘post);
})
App.all(‘/listen3’,function(req,res){
Res.send(‘all);
})
App.listen(8000,function(){
Console.log(‘端口启动成功~’);
})
Node的优势
- 基于V8引擎运行的环境,速度很快;
- 基于事件驱动和非阻塞I/O模型;非阻塞即代表异步;I/O模型:读写文件;
- 采用异步单线程开发;
- Npm包管理器,全球最大的开源生态系统
Node的优点
- 高性能:因为避免了大量线程切换的开销;当大负荷的情况下,内存消耗很少;一般用于做中间层;用来缓冲大量的请求给服务器带来的压力;
- Node的单线程,底层是多线程的;采用非阻塞I/O操作;
- Node的单线程保证了线程的绝对安全,避免了多线程改变同一个变量造成的线程崩溃
Node的缺点
如果其中一个请求发生错误,会导致整个服务崩溃。