为了方便 理解 与 记忆 中间件的使用,Express官网把中间件进行了如下分类。
1 应用级别的中间件
通过app.use()
或app.get()
或app.post()
绑定到app实例
上的中间件,叫做应用级别的中间件
2 路由级别的中间件
绑定到express.route()
实例上的中间件,叫做路由级别的中间件,用法与应用级别中间件没有任何区别。只不过,应用级别中间件是绑定到app实例上的,路由级别中间件绑定到router实例上。
3 错误级别的中间件
错误级别中间件的作用:专门用来捕获整个项目中发生的异常错误
,从而防止项目因异常而崩溃
。
格式:错误级别中间件的function处理函数中必须有四个参数
:(err
,req,res,next)
注
:错误级别的中间件必须注册在所有路由之后
4 express的内置中间件
Express4.16.0 版本开始,Express内置了3个常用的中间件,极大的提高了Express项目的开发效率与体验
1 express.static
快速托管静态资源的内置中间件,如:html文件、图片、css样式等,无兼容性
2 express.json
解析JSON格式的请求体数据(有兼容性,仅在4.16.0+版本中可用)
3 express.unlencoded
解析URL-encoded格式的请求体数据(有兼容性,仅在4.16.0+版本中可用
5 第三方的中间件
非Express官方内置的,由第三方开发出来的中间件,叫做第三方中间件,项目中可以按需下载并配置第三方中间件,从而提高项目的开发效率。
- 允许
npm i body-parser
安装中间件 - 使用
require
导入中间件 - 调用
app.use
注册并使用中间件
注:Express内置express.unlencoded中间件,是基于body.parser这个第三方中间件进步一封装出来的
6 自定义的中间件
自定义中间件实现步骤:
- 定义中间件
- 监听req的data事件
- 监听req的end事件
- 使用querystring模块解析请求体数据
- 将解析出来的数据对象挂载req.body
- 将自定义中间件封装为模块
data事件 来获取客户端发送到服务器的数据。数据量比较大的话,客户端会把数据切割
,分批
发送到服务器端,data事件会触发多次 每次都获取到完整数据的一部分。
end事件 当请求体数据接收完毕之后,会自动触发req的end事件。因此可在end事件中,拿到并处理完整的请求体数据。
querystring 模块是node.js内置的一个模块,专门用来处理查询字符串,通过parse()
函数处理字符串
中间件或方法 | 作用 | 效果 |
---|---|---|
express.JSON()、bodyParser.json() | 解析application/json 格式数据的,若不配置默认取值为undefined |
![]() |
express.urlencoded({extended:false})、bodyParser.urlencoded({extended:false}) | 解析application/x-mmm-form-urlencoded 格式数据,若不配置默认取值为undefined |
![]() |
querystring | 将查询字符串转为JSON |
![]() |