【问题标题】:what the difference between qs and querystringqs 和 querystring 有什么区别
【发布时间】:2015-03-19 02:46:47
【问题描述】:

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

扩展选项允许在解析 URL 编码之间进行选择 使用 querystring 库(当为 false)或 qs 库(当 真的)。 “扩展”语法允许丰富的对象和数组 编码为 URL 编码格式,允许类似 JSON 使用 URL 编码的经验。更多信息请查看qs 图书馆。

我已经阅读了qsquerystring 的文档,但是我找不到任何明显的区别,所以我在这里寻求帮助。

【问题讨论】:

标签: node.js


【解决方案1】:

让我们一起检查一下:

查询字符串

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

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

它是 NodeJS API 的一部分,在 v0.1.25 中引入。

我们可以观察到它有4个主要功能:escape, parse, stringify, unescape

(自v0.1.25以来,除了parse函数之外的所有函数都是一样的。)

~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 : qs (Github Repo.)

撰写本文时

让我们看一下qs.parse 函数:

qs 允许您在查询字符串中创建嵌套对象,通过 用方括号 [] 包围子键的名称。例如, 字符串 'foo[bar]=baz' 转换为:

assert.deepEqual(qs.parse('foo[bar]=baz'), {
>     foo: {
>         bar: 'baz'
>     } });

相对于查询字符串,它可以解析嵌套对象...

默认情况下,当嵌套对象时,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 });

...与 Query String

相比,这只是此软件包提供的众多功能之一

The qs.stringify function has also many more options

我会说qs 是一个高级解决方案。


问题:

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

答案:

它们在目的上没有什么不同。

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

【讨论】:

【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2015-05-24
    • 2010-10-02
    • 2011-12-12
    • 2010-09-16
    • 2012-03-14
    • 2012-02-06
    • 2011-02-25
    • 2011-11-22
    • 2015-03-26
    相关资源
    最近更新 更多