Express 4.0中的“扩展”是什么意思?


87

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

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

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

我找到了这个

extended - parse extended syntax with the qs module.

但是,我仍然不能理解它的含义。

Answers:



76

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

反之,

extendedproperty设置false为时,将使用querystring库解析URL编码的数据。


使用qs库解析和querystring库解析之间的区别

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

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


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

    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



1
应该是选定的答案
nishi

21

从Body-Parser文档:

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

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

基本上,扩展使您可以解析完整的对象。

正文解析器:URL编码

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.