读完两者后,我仍然无法理解它, 可能是语言差异 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])
,几乎没有人使用(我自己从未见过使用过)。