nodejs框架 Express中间件理解

Express中间件:用于处理请求的,本质就是个函数,类似请求拦截,处理不同请求的拦截

详细看下面代码
const express = require('express');
const app = express();
const fs = require('fs');

// 中间件:处理请求的,本质就是个函数,类似请求拦截 app.all() 所有请求都会进入

/**
 * 1、在Express中,对中间件有几种分类
 *         不关心请求路劲和请求方法的中间件
 *         也就是说任何请求都会进入这个中间件
 *         中间件本身是一个方法,该方法接收3个参数
 *         request 请求对象
 *         response 响应对象
 *         next 下一个中间件(中间件可以有多个)
 * 2、当一个请求进入一个中间件之后,如果不调用next 则会停留在当前中间件
 * 所以next是一个方法,用来调用下一个中间件
 * 3、next 方法也是要调用匹配的(不是调用紧挨着的中间件)
 */

app.use(function(req,res,next){
    console.log('请求进来了1');
    // 执行下一个中间件 ↓
    next();
})

app.use(function(req,res,next){
    console.log('请求进来了2');
    next();
})

// ========================== 举例:第三方插件 body-parse 用于解析post请求 ==================================
// 使用方法 app.use('bodyParse');
app.use(function(req,res,next){
    // 判断请求方式为post,解析请求参数,在req上添加属性 body为参数
    req.body = {
        id:'1'
    }
    // 调用下一个中间件
    next();
})

// 下面展示post请求
app.post('/post',function(req,res,next){
    // 这里就可以获取到body-parse 解析的参数了
    console.log(req.body);
})

// ========================== 举例:第三方插件 body-parse 用于解析post请求 ==================================

// 以 /xxx 开头的中间件 例如: localhost:5000/a/login (不严格,只判断开头为/a的进入)
app.use('/a',function(req,res,next){
    console.log(req.url)
})

// 除了以上中间件之外,还有一种最常用的
// 严格匹配请求方法和请求路径的中间件
// app.get
// app.post

app.get('/',function(req,res,next){
    console.log('/');
})

app.post('/a',function(req,res,next){
    console.log('/a');
})

// 错误处理
app.get('/aaa',function(req,res,next){
    fs.readerFile('/aa/bb/cc',(err,data)=>{
        if(err){
            // 当我们调用next传入了参数,就会跳过其他中间件直接进入错误处理中间件
            next(err);
        }
    })
})

// 错误处理中间件 错误中间件有4个参数,当调用 next(err) 传入了参数 就会进入错误处理中间件
app.use(function (err, req, res, next) {
  console.error(err)
  res.status(500).send('Something broke!')
})

// app.get、app.post、express.Router 都是中间件
// 如果没有没有匹配的中间件,则Express 会默认输出:Cannot GET 路径


app.listen(5000,()=>{
    console.log('服务启动成功')
})

 

 

 

 

 

 
posted @ 2021-09-26 16:07  男孩亮亮  阅读(158)  评论(0编辑  收藏  举报