• Nodejs -- Express 中间件的分类


    中间件的分类

    为了方便大家理解和记忆中间件的使用,Express官方把常见的中间件用法,分成了5大类,分别是:

    • 应用级别的中间件
    • 路由级别的中间件
    • 错误级别的中间件
    • Express内置的中间件
    • 第三方的中间件

    1 应用级别的中间件

    通过app.use()app.get()app.post(),绑定到app实例上的中间件,叫做应用级别的中间件,代码示例如下:

    只要是直接通过app.xxx调用的,都可以理解为是应用级别的中间件

    // 应用级别的中间件(全局中间件)
    app.use((req, res, next) => {
        console.log("这是中间件函数")
        next()
    })
    
    // 应用级别的中间件(局部中间件)
    app.get("/user", mw, (req, res) => {
        res.send('success')
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2 路由级别的中间件

    绑定到express.Router()实例上的中间件,叫做路由级别的中间件。它的用法和应用级别中间件没有任何区别。只不过,应用级别中间件是绑定到app实例上,路由级别中间件绑定到router实例上,代码示例如下:

    const express = require("express")
    const router = express.Router()
    
    // 路由级别的中间件
    router.use((req, res, next) => {
        console.log("Time: ", Date.now())
        next()
    })
    
    module.exports = router
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3 错误级别的中间件

    错误级别中间件的作用:专门用来捕获整个项目中发生的异常错误,从而防止项目异常崩溃的问题。

    格式:错误级别中间件的function处理函数中,必须有4个形参,形参顺序从前到后,分别是(err, req, res, next)

    // 路由
    app.get("/user", (req, res) => {
        throw new Error("服务器内部发生了错误!")
        res.send("Home Page")
    })
    
    // 错误级别的中间件,捕获整个项目的异常错误
    app.use((err, req, res, next) => {
        console.log("Error: " + err.message)
        res.send("Error: " + err.message)
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    错误级别的中间件,必须注册在所有路由之后,如果放在前面会导致在该中间件之后的错误无法被捕获

    4 Express内置的中间件

    自Express4.16.0版本开始,Express内置了3个常用的中间件,极大的提高了Express项目的开发效率和体验:

    • express.static快速托管静态资源的内置中间件,例如:HTML文件、图片、CSS样式等(无兼容性)
    • express.json解析SON格式的请求体数据(有兼容性,仅在4.16.0+版本中可用)
    • express.urlencoded解析URL-encoded格式的请求体数据(有兼容性,仅在4.16.0+版本中可用)
    // 配置解析 application/json 格式数据的内置中间件
    app.use(express.json())
    
    // 配置解析 application/x-www-form-urlencoded 格式数据的内置中间件
    app.use(express.urlencoded({ extended: false }))
    
    app.post('/user', (req, res)=>{
    	// 在服务器, 可以使用 req.body 这个属性,来接受客户端端发过来的请求体数据
        // 在默认情况下,如果把配置解析表单数据的中间价, 则 req.body 默认等于 undefined
        console.log(req.body)
        res.send('ok')
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    除了错误级别的中间件,其他的中间件,必须在路由之前进行配置

    5 第三方中间件

    非Express官方内置的,而是由第三方开发出来的中间件,叫做第三方中间件。在项目中,大家可以按需下载并配置第三方中间件,从而提高项目的开发效率。

    例如:在express@4.16.0之前的版本中,经常使用body-parser这个第三方中间件,来解析请求体数据。使用步骤如下:

    • 运行npm install body-parser安装中间件
    • 使用require导入中间件
    • 调用app.use()注册并使用中间件

    Express内置的express…urlencoded中间件,就是基于body~parser这个第三方中间件进一步封装出来的。

  • 相关阅读:
    基于EasyExcel锁定指定列导出数据到excel
    JAVA毕业设计河南省农村多元化养老服务管理系统设计与实现计算机源码+lw文档+系统+调试部署+数据库
    智能视频已上线,提供50+AI算法
    动态gif如何制作?教你一招简单的方法
    面试后的反思与总结:不断进步的关键
    Linux安装ffmpeg
    当需要在不同操作系统和编程语言环境中共享和处理 XML 数据时,可能会遇到哪些兼容性问题,以及如何解决?
    Flink快速上手 完整使用 (第二章)
    知识图谱 | DDoS攻击恶意行为知识库构建
    无门槛访问ChatGPT升级版-数据指北AI
  • 原文地址:https://blog.csdn.net/qq_46311811/article/details/128088124