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对象

posted @ 2022-02-18 16:46  初生土豆  阅读(40)  评论(0编辑  收藏  举报