在读完这两本书后,我仍然无法解决这个问题, 可能是语言差异,但是请帮助澄清。
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()
我知道这不是代码问题,但在此先感谢任何可以列出主要区别的人。
答案 0 :(得分:1)
那为什么我应该使用body-parser(我必须分开安装)而不是总是使用express.urlencoded()
出于简单的原因,它在旧版的Express中不可用
此中间件在Express v4.16.0及更高版本中可用。
如果您使用的是最新版本,则几乎没有理由。
body-parser
提供了一些其他实用程序,例如bodyParser.raw([options])
或bodyParser.text([options])
,几乎没有人使用(从未见过自己使用过)。