qs和querystring有什么区别

Wrq*_*Wrq 19 node.js

有一个功能bodyparser.urlencoded(options)body-parser,它有一个叫做扩展选项.

扩展选项允许选择使用查询字符串库(假设时)或qs库(当为真时)解析URL编码数据."扩展"语法允许将富对象和数组编码为URL编码格式,从而允许使用URL编码的类似JSON的体验.有关更多信息,请参阅qs库.

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

EMX*_*EMX 16

让我们检查一下:

· 请求参数

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

Node.js v10.0.0文档:API:查询字符串

它是NodeJS API的一部分,介绍于v0.1.25.

我们可以观察它有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.
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它是一个简单的解决方案,其主要目的.


· qs模块:

查询字符串解析和字符串化库,增加了一些安全性.

NPM套餐:qs (GitHub库.)

(在撰写本文时)

让我们一睹这个qs.parse功能:

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

assert.deepEqual(qs.parse('foo[bar]=baz'), {
foo: {
    bar: 'baz'
} });
Run Code Online (Sandbox Code Playgroud)

与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'
                        }
                    }
                }
            }
        }
    }
};
Run Code Online (Sandbox Code Playgroud)

深度可以被覆盖:

var deep = qs.parse('a[b][c][d][e][f][g][h][i]=j', { depth: 8 });
Run Code Online (Sandbox Code Playgroud)

...与Query String相比,这只是该软件包提供的众多功能之一

qs.stringify功能还有更多选项

我想说qs是一种先进的解决方案.


题 :

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

答案:

它们在目的上没有区别.

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

  • 您可以在此沙箱中测试“qs”和“querystring”之间的差异:https://stackblitz.com/edit/node-xa27zd?file=index.js (2认同)

小智 10

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

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

whileqs可以在嵌套对象中解析。