我在我的应用程序中使用了express和body-parser。
app.use(bodyParser.urlencoded({ extended: false }));
但是,'扩展'快递4.0意味着什么?
我发现了这个
extended - parse extended syntax with the qs module.
但是,我仍然无法理解其含义。
答案 0 :(得分:101)
如果extended
为false
,则无法发布"嵌套对象"
person[name] = 'cw'
// Nested Object = { person: { name: cw } }
如果extended
为true
,您可以采取任何您喜欢的方式。
答案 1 :(得分:22)
当
extended
属性设置为true
时,网址编码的数据将会 用qs library解析。
相反,
当
extended
属性设置为false
时,网址编码的数据将会 而是用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 answer和npm compare qs vs query-string。
答案 2 :(得分:17)
来自Body-Parser文档:
在中间件(即req.body)之后,在请求对象上填充包含已解析数据的新body对象。此对象将包含键值对,其中值可以是字符串或数组(当扩展为false时)或任何类型(当扩展为true时)。
和
扩展选项允许选择使用查询字符串库(假设时)或qs库(当为真时)解析URL编码数据。 “扩展”语法允许将富对象和数组编码为URL编码格式,从而允许使用URL编码的类似JSON的体验。有关详细信息,请参阅qs库。
基本上扩展允许您解析完整的对象。