中间件知识扩展

中间件的分类

① 应用级别的中间件
② 路由级别的中间件
③ 错误级别的中间件
④ Express内置的中间件
⑤ 第三方的中间件

应用级别的中间件

通过 app.use()app.get()app.post(),绑定到app实力上的中间件,叫做应用级别的中间件(上篇说的全局和局部)

路由级别的中间件

绑定到express.Router()实例上的中间件,叫做路由级别的中间件

错误级别的中间件

错误级别的中间件的作用:专门用来捕获项目中发生的异常错误,从而防止项目异常崩溃的问题。
格式:处理函数中必须有四个形参,分别是(err, req, res, next)

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

实例:

const express = require('express')
const app = express()
app.get('/test', function(req, res) {
    throw new Error('服务器内部错误')
    res.send('hello word')
})
app.use(function(err, req, res, next) {
    console.log(err.message)
    res.send('Error' + err.message)
})
// 3、调用app.listen(端口号, 成功的回调)
app.listen(8085, () => {
    console.log('服务器运行起来了')
})

Express内置的中间件

express.static 快速托管静态资源的内置中间件
express.json 解析JSON格式的请求体数据(仅在4.16.0+的版本中可用)
express.urlencoded 解析URL-encoded 格式的请求体数据(仅在4.16.0+的版本中可用)
在服务器中,可以使用req.body属性,接收客户端发送过来的请求体数据
默认情况下,如果不配置解析表单数据的中间件,则req.body默认等于undefined

// 配置解析 application/json 格式数据的内置中间件
app.use(express.json())
// 配置解析 application/x-www-form-urlencoded 格式数据的内置中间件
app.use(express.urlencoded({ extended: false }))

第三方的中间件

在这里插入图片描述
使用:

const parser = require('body-parser')
app.use(parser.urlencoded({ extended: false })
app.use(parser.json())

自定义中间件

步骤:
① 定义中间件
② 监听req的data事件
③ 监听req的end事件
④ 使用querystring模块解析请求体数据
⑤ 将解析出来的数据对象挂载为req.body
⑥ 将自定义中间件封装为模块

注:querystring已弃用

// 1、导入express
const express = require('express')
const router1 = require('./router/router1')
const qs = require('querystring')
// 2、创建web服务器
const app = express()
app.use(function(req, res, next) {
    // 如果数据量比较大,客户端会把数据切割后,分次发送到服务器
    // 定义变量,用来存储客户端发来的数据
    let str = ''
    // 监听req对象的data事件
    req.on('data', (chunk) => {
        str += chunk
    })
    // 请求体数据接收完毕,会自动触发req的end事件
    req.on('end', () => {
        console.log(str);
        // 把查询字符串转化为对象
        const body = qs.parse(str)
        req.body = body
        next()
    })
})
app.get('/test', function(req, res) {
    console.log(req.body);
    res.send('hello word')
})
// 3、调用app.listen(端口号, 成功的回调)
app.listen(8085, () => {
    console.log('服务器运行起来了')
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值