文章目录
0.Express中间件的概念
定义
业务流程的中间处理环节
本质
一个function处理函数,参数:请求对象req,响应对象res,中间件next
app.use(function(req,res,next) {
...
next();
})
调用流程
当一个请求到达Express的服务器之后,可以连续调用多个中间件,从而对这次请求进行预处理。
next参数&next()函数
中间件函数的形参列表中,必须包含next参数,路由处理函数中只包含req和res.
next函数的作用:表示把流转关系转交给下一个中间件或路由。
是实现多个中间件连续调用的关键
意思就是没有next形参和调用next(),不能往下执行下一个回调函数
中间件的作用
- 执行任何代码
- 修改请求&响应对象
- 终结请求&响应循环
- 调用下一个中间件
中间件的分类
- 应用级中间件
- 路由级中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件
注意事项
1.一定要在路由之前注册中间件
2.客户端发送过来的请求,可以连续调用多个中间件进行处理
3.执行完中间件的业务代码之后,不要忘记调用 next() 函数
4.为了防止代码逻辑混乱,调用 next() 函数后不要再写额外的代码
5.连续调用多个中间件时,多个中间件之间,共享 req 和 res 对象
6.多个中间件只能在其中一个中间件中有一个res.send()语句,否则报错
1.局部生效的中间件
不使用 app.use() 定义的中间件,叫做局部生效的中间件
示例
var func1 = (req, res, next) => {
console.log('调用了局部生效的中间件');
next();
}
var func2 = (req, res, next) => {
console.log('调用了全局生效的中间件');
next();
};
app.use(func2);//func2这个中间件在当前所有路由中自动调用生效
app.get('/', func1, (req, res) => {
res.send('Home page.') }); // func1这个中间件只在当前路由中生效
app.get('/user', (req, res) => {
res.send('User page.') });
2.应用级中间件(全局)
应用级中间件绑定到app对象,使用app.use()和app.METHOD(),
其中,METHOD表示需要处理的http请求的方法如get,post,put等等
app.use();
app.get();
app.post();
...
都可以注册中间件
语法
var express = require('