node的bodyParser和express的urlencode中间件有什么区别?



读完两者后,我仍然无法理解它, 可能是语言差异 bu 请帮助澄清。

express.urlencoded()

返回仅分析 urlencoding 正文的中间件,并且仅查看内容类型标头与类型选项匹配的请求。此解析器仅接受正文的 UTF-8 编码,并支持 gzip 和压缩编码的自动膨胀。

body-parser中间件

处理程序之前解析中间件中的传入请求正文,在 req.body 属性下可用。

我知道express.urlencoded是基于 Nodejsbody-parser的。 和两个页面,

https://expressjs.com/en/api.html#express.urlencoded

https://expressjs.com/en/resources/middleware/body-parser.html

甚至说同样的警告:

由于 req.body 的形状基于用户控制的输入,因此此对象中的所有属性和值都是不受信任的,应在信任之前进行验证。例如,req.body.foo.toString() 可能以多种方式失败,例如 foo 可能不存在或可能不是字符串,而 toString 可能不是一个函数,而是一个字符串或其他用户输入。

但最终两者都给了我一个req.body,其中包含在请求正文对象中发送的参数。 那么为什么我应该使用正文解析器(我必须单独安装)而不是总是使用express.urlencoded()

我知道这不是代码问题,但我提前感谢任何可以列出主要差异的人。

那么为什么我应该使用body-parser(我必须单独安装)而不是总是使用express.urlencoded()

原因很简单,它在旧版本的 Express 中不可用

此中间件在 Express v4.16.0 及更高版本中可用。

如果您使用的是最新版本,则几乎没有理由这样做。

body-parser提供了一些额外的实用程序,如bodyParser.raw([options])bodyParser.text([options]),几乎没有人使用(我自己从未见过使用过)。

最新更新