什么'扩展'快递4.0意味着什么?

时间:2015-04-30 06:42:20

标签: node.js express body-parser

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

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

但是,'扩展'快递4.0意味着什么?

我发现了这个

extended - parse extended syntax with the qs module.

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

3 个答案:

答案 0 :(得分:101)

如果extendedfalse,则无法发布"嵌套对象"

person[name] = 'cw'

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

如果extendedtrue,您可以采取任何您喜欢的方式。

答案 1 :(得分:22)

  

extended属性设置为 true 时,网址编码的数据将会   用qs library解析。

相反,

  

extended属性设置为 false 时,网址编码的数据将会   而是用querystring library解析。

`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's answernpm compare qs vs query-string

答案 2 :(得分:17)

来自Body-Parser文档:

  

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

  

扩展选项允许选择使用查询字符串库(假设时)或qs库(当为真时)解析URL编码数据。 “扩展”语法允许将富对象和数组编码为URL编码格式,从而允许使用URL编码的类似JSON的体验。有关详细信息,请参阅qs库。

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

Body Parser: Url Encoded