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

时间:2019-04-15 15:04:52

标签: javascript node.js express urlencode body-parser

在读完这两本书后,我仍然无法解决这个问题, 可能是语言差异,但是请帮助澄清。

express.urlencoded()

  

返回仅解析urlencode主体并且仅查看Content-Type标头与type选项匹配的请求的中间件。该解析器仅接受主体的UTF-8编码,并支持gzip和deflate编码的自动填充。

body-parser中间件

  

先在中间件中解析传入的请求主体,然后再在处理程序中对其进行处理,该请求主体可在req.body属性下找到。

我了解express.urlencoded是基于Nodejs body-parser的。 和两个页面

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

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

甚至说同样的警告提示:

  

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

,但最终两者都给了我req.body,并在请求正文对象中发送了参数。因此,为什么我应该使用body-parser(必须分别安装)而不是始终使用express.urlencoded()

我知道这不是代码问题,但在此先感谢任何可以列出主要区别的人。

1 个答案:

答案 0 :(得分:1)

  

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

出于简单的原因,它在旧版的Express中不可用

  

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

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

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