【问题标题】:What is the difference between node's bodyParser and express's urlencoded middleware?node body Parser和express urlencoded中间件有什么区别?
【发布时间】:2019-04-15 15:04:52
【问题描述】:

读完这两篇文章后,我仍然无法理解, 可能是语言差异,请帮助澄清。

express.urlencoded()

返回仅解析 urlencoded 正文并仅查看 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 的形状基于用户控制的输入,因此该对象中的所有属性和值都是不可信的,应该在信任之前进行验证。例如, req.body.foo.toString() 可能会以多种方式失败,例如 foo 可能不存在或可能不是字符串,toString 可能不是函数,而是字符串或其他用户输入。

但最终两者都给了我一个req.body,并在请求正文对象中发送了参数。那我为什么要使用body-parser(我必须单独安装)而不是总是使用express.urlencoded()

我知道这不是代码问题,但我提前感谢任何能列出主要区别的人。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 哦!感谢您的微笑但非常难以理解的答案! :D 所以我想即使我使用的是最新的 express 版本并且没有真正的理由安装body-parser 仍然存在依赖项更改失败(就像我在调查后遇到的 PassportJS 一样即使我打开了urlencoded 中间件,它似乎也错过了正文解析器。可能是?)
    • passportjs 仅列出了 2 个依赖项 passport-strategypause,它可能来自其他依赖于 body-parser 的软件包
    • 太棒了!谢谢,我会继续寻找。但正如我从您的回答和评论中了解到的那样。可能存在依赖关系失败。这给我带来了urlencoded() 的可靠性问题,让我想知道始终包含body-parser 而不是urlencoded 是否只是为了始终安全。我的意思是我毕竟是一个节点模块。它本身太可靠了。 @naga - elixir - jar 非常感谢您的回答。
    • 现在express 拥有body-parserdependencies,所以当你运行npm install express 时它应该会自动下载body-parser。不知道为什么需要重新下载
    • 这可能只是 body parser 在我的代码中并不是我的问题。它只是让我调查它,只是无法分辨差异。 :) 我会继续寻找
    猜你喜欢
    • 2019-07-06
    • 2015-02-14
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2015-10-24
    • 2017-09-28
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多