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

时间:2016-10-05 09:55:26

标签: json express body-parser

有关:

bodyParser.urlencoded({extended: ...})

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

app.use(bodyParser.json())

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

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

3 个答案:

答案 0 :(得分:63)

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

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

  • bodyParser.urlencoded({extended: ...})基本上告诉系统是否要使用简单算法进行浅层解析(即错误)或使用复杂算法进行深度解析,以处理嵌套对象(即true)。

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

答案 1 :(得分:6)

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

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

答案 2 :(得分:2)

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

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