`app.use(bodyParser.json())` 有啥作用?

Posted

技术标签:

【中文标题】`app.use(bodyParser.json())` 有啥作用?【英文标题】:What does `app.use(bodyParser.json())` do?`app.use(bodyParser.json())` 有什么作用? 【发布时间】:2017-02-13 17:10:30 【问题描述】:

为:

bodyParser.urlencoded(extended: ...)

我的研究表明,如果extended: true,那么您可以解析嵌套对象,或者通常是任何类型。但是,如果设置了extended: false,则只能解析字符串或数组。但是...

app.use(bodyParser.json())

究竟是什么意思?我的意思是,是的......我知道文档提到它解析 json。但我仍然很困惑。我注意到设置extended: true 的应用程序根本不使用bodyParser.json()。但是extended: false 的应用程序倾向于使用bodyParser.json()。为什么是这样?归根结底,两个应用程序都能够解析 json。

其次,推荐的方法是什么?

【问题讨论】:

【参考方案1】:

好的,与我之前的想法相反,进一步的研究表明extended: trueapp.use(bodyParser.json()) 可以一起使用。所以使用它的不仅仅是extended: falseapp.use(bodyParser.json()) 语句要独立使用,无论你设置扩展为true 还是false

app.use(bodyParser.json()) 基本上告诉系统您希望使用 json。

bodyParser.urlencoded(extended: ...) 基本上告诉系统你是想使用简单的算法进行浅层解析(即假)还是复杂的算法进行深度解析,可以处理嵌套对象(即真)。

查看示例文档(即https://expressjs.com/en/guide/migrating-4.html)。

【讨论】:

我很感激。谢谢。【参考方案2】:

URL 编码和 JSON 编码都允许将(嵌套)对象转换为字符串,但格式不同。 URL 编码的字符串通常不是有效的 JSON 字符串。

一个应用程序可以使用一种编码方法,而另一种编码方法。只要他们不将两者混为一谈,它就会起作用。

【讨论】:

一个应用程序集是否可以扩展为真,但仍然有app.use(bodyParse.json())?还是后者总是与扩展为假?但有趣的是,两者似乎都适用于 json 解析。【参考方案3】:

bodyParser.json 返回只解析 json 的中间件。此解析器接受正文的任何​​ Unicode 编码,并支持 gzip 和 deflate 编码的自动膨胀。

在中间件之后的请求对象上填充一个包含解析数据的新主体对象(即 req.body)。

【讨论】:

以上是关于`app.use(bodyParser.json())` 有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

node cookie和session的使用

表达意外的记号 k

nodejs 实现接口

bodyParser中间件的研究

nodejs:app.use处理post请求

node 基础