express中间件
-中间件概念
-中间件特指业务流程的中间处理环节
-express中间件的格式
//中间件的形参列表中,必须包含next参数,而路由处理函数中只包含req和res app.get('/',(req,res,next)=>{ next() })
-next函数的作用
next函数是实现多个中间件连续调用的关键,他表示把流转关系转交给下一个中间件或路由
-体验express中间件
-定义中间件函数
const mv = (req,res,next)=>{ console.log('this is simple mv most'); //把流转关系,转交个下一个中间件或路由 next() }
-全局生效的中间件
//将mv注册为全局中间件,这样的话任何请求都会先经过mv处理 app.use(mv)
-全局中间件简化形式
app.use((req,res,next)=>{ console.log('this is simple mv most'); //把流转关系,转交个下一个中间件或路由 next() })
-中间件的作用
多个中间件之间,共同一份req和res,这样我们可以在请求刚到服务器时,可以在上游的中间件中,统一为req和res对象添加自定义属性或或方法,给下游的中间件和路由使用
const express = require('express')
const app = express()
app.use((req,res,next)=>{
const time = Date.now()
//为req挂载自定义属性,从而共享给后面的所有路由
req.startTime = time
console.log('this is simple mv most');
//把流转关系,转交个下一个中间件或路由
next()
})
app.get('/user', (req, res) => {
// res.sendStatus(req.startTime)
res.send('请求成功'+req.startTime)
})
app.post('/user', (req, res) => {
res.send('请求成功')
})
app.listen(80,()=>{
console.log('server is running');
})
-创建多个中间件
执行顺序按照中间件定义先后顺序执行
app.use((req,res,next)=>{ const time = Date.now() //为req挂载自定义属性,从而共享给后面的所有路由 req.startTime = time console.log('this is simple mv most'); //把流转关系,转交个下一个中间件或路由 next() }) app.use((req,res,next)=>{ console.log('second mv'); next() })
结果.jpg

-局部生效的中间件
不使用app.use()定义 中间件,叫做局部生效的中间件
const express = require('express')
const app = express()
const m1 = (req,res,next)=>{
console.log('调用了局部生效的中间件');
next()
}
//调用m1中间件
app.get('/',m1,(req,res)=>{
res.send('index page')
})
app.get('/user',(req,res)=>{
res.send('user page')
})
app.listen(80,()=>{
console.log('server is running');
})
访问 ‘/’打印结果.jpg

访问‘/user’打印结果.jpg
什么都不打印
-定义多个局部中间件,可以通过如下两种等价的方式,使用多个局部中间件
app.get('/',m1,m2,(req,res)=>{
res.send('index page')
})
app.get('/user',[m1,m2],(req,res)=>{
res.send('user page')
})
-注意:
一定要在路由之前注册中间件
客户端发过来的请求,可以连续调用多个中间件进行处理
执行完业务代码后,记得调用next()函数
为防止代码逻辑混乱,在next函数执行之后不再写额外的代码
连续调用多个中间件时,多个中间件之间共享req和res对象

浙公网安备 33010602011771号