Express中间件本质上就是一个function处理函数
中间件的作用:
多个中间件之间,共享同一份req和res,我们就可以在上游的中间件中统一为req或者res对象添加自定义的属性或方法,供下游的中间件或路由进行使用,非常方便
流程:
1.客户端发起请求
2.上游
中间件1:req.a=10
中间件2:res.c=30
…
3.下游
处理完毕响应请求
访问req.a和res.c属性的值
4.响应回客户端
注意:
中间件要放在路由之前
调用next()之后就不要再写额外的代码
next函数是实现多个中间件连续调用的关键,把流转关系转交给下一个中间件或者路由
定义全局中间件函数
//定义一个最简单的中间件函数 完整写法
const mw=function(req,res,next){
console.log("这是最简单的中间件函数");
// 先经过中间件,然后把流转关系转交给下一个中间件或路由
next()
}
//将mw注册为全局生效的中间件
app.use(mw)
//简化写法
app.use((req,res,next)=>{
console.log("这是最简单的中间件函数");
next()
})
然后再创建路由来测试中间件在这个过程中的位置,用postman发get或者post请求来测试
app.get("/",(req,res)=>{
console.log("调用了/路由");
res.send("Home page")
})
app.post("/user",(req,res)=>{
console.log("调用了/user路由");
res.send("user page")
})
如果要定义多个全局中间件,就使用app.use连续定义多个全局中间件,会按照中间件定义的先后顺序依次进行调用
定义局部生效的中间件函数
// 定义中间件函数
const mw1 = function (req, res, next) {
console.log("调用了局部生效的中间件");
// 先经过中间件,然后把流转关系转交给下一个中间件或路由
next()
}
//创建路由
//这个经过中间件
app.get("/",mw1, (req, res) => {
res.send("Home page. ")
})
//这个不经过中间件
app.get("/user", (req, res) => {
res.send("user page. ")
})
通过路由部分就可以测试是否通过局部生效中间件。
如果想要同时使用多个局部生效中间件,可以直接用逗号分隔mw1,mw2,按照顺序先后调用,也可以用数组[mw1,mw2]