📜  不推荐使用 express body-parser - Javascript (1)

📅  最后修改于: 2023-12-03 15:21:31.558000             🧑  作者: Mango

不推荐使用 express body-parser

在以往的版本中,express框架中默认自带 body-parser 中间件用于解析 HTTP 请求中的 body 数据,但是在新版本中,官方文档已明确表示不再推荐使用 body-parser,而是推荐直接使用内置的 express.json() 和 express.urlencoded() 中间件。

body-parser的缺点
  1. 安全性问题:使用 body-parser 存在身份验证绕过和请求伪造的风险,因为没有对解析请求体中的子解析器进行深度审计。
  2. 性能问题:body-parser 是一个介于 HTTP request 和 Express routes 之间的中间件,会在每个请求中都被执行,会对请求的处理速度有一定的影响。如果我们将请求体中的数据结构指定为 JSON 格式,那么使用内置的 express.json() 中间件可以更快地进行解析并且更加安全。
  3. 多样性问题:body-parser 对于所有的位置类型默认使用 UTF-8 编码,而在实际应用场景中,可能会出现其他编码类型,body-parser 不能处理这些情况。
使用内置的 express.json() 和 express.urlencoded() 中间件

既然官方已经不推荐使用 body-parser,那么我们应该如何使用内置的 express.json() 和 express.urlencoded() 中间件呢?

const express = require('express');

const app = express()
app.use(express.json()) // 解析json格式的请求body
app.use(express.urlencoded({ extended: true })) // 解析表单格式的请求body

app.post('/api/user', (req, res) => {
  console.log(req.body)
  res.send('success')
})

app.listen(3000, () => {
  console.log('Server is listening on port 3000!')
})
总结

虽然 body-parser 依然可以使用,但是从安全性、性能以及多样性等方面考虑,我们应该遵循官方的推荐,并且尽量使用内置的 express.json() 和 express.urlencoded() 中间件去解析请求体数据。