bodyparser.urlencoded(options)
中有一个函数body-parser
,它有一个名为extended的选项。
扩展选项允许在解析URL编码之间进行选择 使用查询字符串库(假设时)或qs库(何时 真正)。 "扩展"语法允许丰富的对象和数组 编码为URL编码格式,允许类似JSON 使用URL编码的经验。有关更多信息,请参阅qs 库。
我看过qs
和querystring
文件,但我找不到任何明显的区别,所以我在这里寻求帮助。
答案 0 :(得分:11)
querystring模块提供了解析和格式化的实用程序 URL查询字符串。
它是v0.1.25
中引入的NodeJS API的一部分。
我们可以观察到它有4个主要功能: escape, parse, stringify, unescape
(除了parse
函数以外的所有函数都是相同的,因为 v0.1.25
。)
〜
querystring.parse
的历史:
Version Changes
v8.0.0 Multiple empty entries are now parsed correctly (e.g. &=&=).
v6.0.0 The returned object no longer inherits from Object.prototype.
v4.2.4 The eq parameter may now have a length of more than 1.
正如您所看到的,它的主要目的是简单解决方案。
qs
模块:一个查询字符串解析和字符串化库,添加了一些 安全
qs
(Github Repo.)(在撰写本文时)
bug
)让我们一瞥qs.parse
函数:
qs允许您在查询字符串中创建嵌套对象 用方括号[]包围子键的名称。例如, 字符串'foo [bar] = baz'转换为:
assert.deepEqual(qs.parse('foo[bar]=baz'), { foo: { bar: 'baz' } });
与Query String相比,它能够解析嵌套对象......
默认情况下,嵌套对象qs最多只能解析5个子对象 深。这意味着如果您尝试解析类似的字符串 'a [b] [c] [d] [e] [f] [g] [h] [i] = j'你的结果对象将是:
var expected = { a: { b: { c: { d: { e: { f: { '[g][h][i]': 'j' } } } } } } };
可以覆盖深度:
var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 8 });
...与查询字符串
相比,这只是此软件包提供的众多功能之一 The qs.stringify
function has also many more options
我会说qs
是高级解决方案。
我已阅读
qs
和querystring
文件,但我找不到任何文件 明显不同,所以我在这里寻求帮助。
它们在目的上没有区别。
querystring
有一些限制,但最后,这取决于您的需求......
答案 1 :(得分:0)
简单来说,
querystring
无法解析嵌套对象。
相反,它将以 []
格式呈现。
虽然 qs
可以在嵌套对象中解析。