qs和querystring之间有什么区别

时间:2015-03-19 02:46:47

标签: node.js

bodyparser.urlencoded(options)中有一个函数body-parser,它有一个名为extended的选项。

  

扩展选项允许在解析URL编码之间进行选择   使用查询字符串库(假设时)或qs库(何时   真正)。 "扩展"语法允许丰富的对象和数组   编码为URL编码格式,允许类似JSON   使用URL编码的经验。有关更多信息,请参阅qs   库。

我看过qsquerystring文件,但我找不到任何明显的区别,所以我在这里寻求帮助。

2 个答案:

答案 0 :(得分:11)

让我们检查一下:

·查询字符串

  

querystring模块提供了解析和格式化的实用程序   URL查询字符串。

Node.js v10.0.0 Documentation : API : Query String

它是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模块:

  

一个查询字符串解析和字符串化库,添加了一些   安全

NPM Package : qsGithub Repo.

在撰写本文时

让我们一瞥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高级解决方案。

问题:

  

我已阅读qsquerystring文件,但我找不到任何文件   明显不同,所以我在这里寻求帮助。

答案:

它们在目的上没有区别。

querystring有一些限制,但最后,这取决于您的需求......

答案 1 :(得分:0)

简单来说, querystring 无法解析嵌套对象。

相反,它将以 [] 格式呈现。

虽然 qs 可以在嵌套对象中解析。