js中间件

中间件的作用 :

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

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

中间件的分类 :

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

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

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

  4. Express内置的中间件

  5. 第三方的中间件

应用级中间件

 全局中间件

  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

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

express.urlencoded

 请求结果:{ 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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值