js中间件

中间件的作用 :

共享一份 req,res 上游的中间件定义的属性和方法,下游的中间件和路由能使用

多次调用 app.use() 可以定义多个中间件

中间件的分类 :

  1. 应用级别的中间件 绑定到app实例身上

  2. 路由级别的中间件 绑定到router实例身上

  3. 错误级别的中间件 形参(err,req,res,next)

  4. Express内置的中间件

  5. 第三方的中间件

js中间件

应用级中间件

 全局中间件

  1. 定义一个函数

  2. 注册这个函数为中间件

const express = require('express')

const app = express()


const mw = (req, res, next) => {
    console.log('这是个最简单的中间件');
    // 把流传关系交给后面的路由
    next()
}
// 全局注册中间件
app.use(mw)

//路由
app.get('/', (req, res) => {
    res.send('Server')
})
app.post('/user', (req, res) => {
    res.send('user Server')
})
app.listen(3000, () => {
    console.log('服务器启动于: http://127.0.0.1:3000');

中间件的简写

// 全局生效的中间件,省略中间件
app.use((req, res, next) => {
    console.log('这是个最简单的中间件');
    // 把流传关系交给后面的路由
    next()
})

局部生效中间件

// 第三变量接收中间件函数
const mw1 = (req, res, next) => {
    console.log('这是个最简单的中间件');
    // 把流传关系交给后面的路由
    req.a = '星星少爷'
    next()
}

// 局部生效中间件
app.get('/', mw1 ,(req, res) => {
    res.send('Server' + req.a)
})

多个局部生效中间件

// 局部生效中间件
app.get('/', mw1,mw2,mw3 ,(req, res) => {
    res.send('Server' + req.a)
})

// 局部生效中间件
app.get('/',[ mw1,mw2,mw3 ],(req, res) => {
    res.send('Server' + req.a)
})

错误级别中间件

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

错误级别中间件必须注册在所有的路由之后

//下载express  npm i express -S
const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
    // 人为制造错误
    throw new Error('星星少爷死了')
    res.send('Hello World!')
})
app.use((err, req, res, next) => {
    console.log('错误:' + err.message);
    // res.send(err.message)
})
app.listen(port, () => console.log(`Server running at  http://127.0.0.1:${port}`))

内置中间件

  1. express.static 快速托管静态资源的内置中间件,例如: HTML文件、图片、CSS样式等(无兼容性)

  2. express.json 解析JSON格式的请求体数据(有兼容性,仅在4.16.0+版本中可用)

  3. express.urlencoded 解析URL-encoded格式的请求体数据(有兼容性,仅在4.16.0+版本中可用)

//下载express  npm i express -S
const express = require('express')
const app = express()
const port = 3000

app.use(express.json())
app.use(express.urlencoded())
app.post('/user', (req, res) => {
    console.log(req.body);
    res.send('Hello World!')
})
app.listen(port, () => console.log(`Server running at  http://127.0.0.1:${port}`))

express.json

js中间件

 请求结果:{ name: '星星', age: 18 }

express.urlencoded

js中间件

 请求结果:{ name: '星星少爷', age: '80' }

第三方中间件

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

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

    • 运行 npm install body-parser 安装中间件

    • 使用 require 导入中间件

    • 调用 app.use() 注册并使用中间件

  3. 注意:Express 内置的 express.urlencoded 中间件,就是基于 body-parser 这个第三方中间件进一步封装出来

自定义中间件

  1. 实现步骤:

    • 定义中间件

    • 监听 reqdata 事件

    • 监听 reqend 事件

    • 使用 querystring 模块解析请求体数据

    • 将解析出来的数据对象挂载为 req.body

    • 将自定义中间件封装为模块

上一篇:node.js + express服务端,客户端请求图片,在浏览器出现乱码解决方案


下一篇:CORS跨域问题以及跨域之后Set-Cookie无法设置Cookie问题