What does 'extended' mean in express 4.0?

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

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

但是,在 Express4.0中“扩展”是什么意思?

我找到了这个

extended - parse extended syntax with the qs module.

然而,我仍然不能理解这意味着什么。

69358 次浏览

来自 Body-Parser 文档:

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

还有

扩展选项允许在使用 querystring 库(当为 false 时)或 qs 库(当为 true 时)解析 URL 编码的数据之间进行选择。“扩展”语法允许将富对象和数组编码为 URL 编码格式,允许使用 URL 编码的类似 JSON 的体验。有关更多信息,请参见 qs 库。

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

身体解析器: Url 编码

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

person[name] = 'cw'


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

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

When extended property is set to true, the URL-encoded data will 使用 Qs 库进行解析。

恰恰相反,

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


使用“ qs 库”解析与使用“ querystring 库”解析的区别

  • Qs 库允许您从查询字符串创建 nested对象。

      var qs = require("qs")
    var result = qs.parse("person[name]=bobby&person[age]=3")
    console.log(result) // { person: { name: 'bobby', age: '3' } }
    
  • Query-string 没有支持从查询字符串创建嵌套对象。

      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' }
    

  • Query-string library 将从查询字符串中过滤出’?’。

      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 比较 qs 和 query-string