115

我在我的应用程序中使用 express 和 body-parser。

app.use(bodyParser.urlencoded({ extended: false }));

但是,express 4.0 中的“扩展”是什么意思?

我找到了这个

extended - parse extended syntax with the qs module.

但是,我仍然无法理解它的含义。

4

3 回答 3

170

如果extendedfalse,则不能发布“嵌套对象”

person[name] = 'cw'

// Nested Object = { person: { name: cw } }

如果extendedtrue,你可以做任何你喜欢的方式。

于 2016-09-29T20:53:56.227 回答
127

extended属性设置为 时true,将使用qs 库解析 URL 编码的数据。

相反,

extended属性设置为false时,URL 编码的数据将改为使用查询字符串库进行解析。


使用 `qs library` 与 `querystring library` 解析之间的区别

  • qs库允许您从查询字符串创建嵌套对象。

    var qs = require("qs")
    var result = qs.parse("person[name]=bobby&person[age]=3")
    console.log(result) // { person: { name: 'bobby', age: '3' } }
    


  • 查询字符串支持从查询字符串创建嵌套对象。

    var queryString = require("query-string")
    var result = queryString.parse("person[name]=bobby&person[age]=3")
    console.log(result) // { 'person[age]': '3', 'person[name]': 'bobby' }
    


  • qs不会过滤掉 '?' 从查询字符串。

    var qs = require("qs")
    var result = qs.parse("?a=b")
    console.log(result) // { '?a': 'b' }
    


  • 查询字符串库将过滤掉“?” 从查询字符串。

    var queryString = require("query-string")
    var result = queryString.parse("?a=b")
    console.log(result) // { a: 'b' }
    

app.use(bodyParser.urlencoded({ extended: true })) // for parsing application/x-www-form-urlencoded


有关更多信息,您可以参考Leonid Beschastny 的答案,以及npm compare qs vs query-string

于 2017-08-15T09:48:24.503 回答
22

来自 Body-Parser 文档:

在中间件(即req.body)之后的请求对象上填充了一个包含解析数据的新主体对象。该对象将包含键值对,其中值可以是字符串或数组(当扩展为假时)或任何类型(当扩展为真时)。

扩展选项允许在使用 querystring 库(如果为 false)或 qs 库(如果为 true)解析 URL 编码数据之间进行选择。“扩展”语法允许将丰富的对象和数组编码为 URL 编码格式,从而提供类似 JSON 的 URL 编码体验。有关详细信息,请参阅 qs 库。

基本上扩展允许您解析完整的对象。

正文解析器:Url 编码

于 2015-04-30T06:48:09.367 回答