0

来自node.js 文档

querystring.parse('foo=bar&baz=qux&baz=quux&corge')

// returns
{ foo: 'bar', baz: ['qux', 'quux'], corge: '' }

当我在服务器端解析参数时,有没有办法检查这些参数是否以正确的顺序发送?

例如,我想强制foo=bar始终是 FIRST 参数等等。这是如何实现的?

现在我可以做类似的事情:

var queryData = querystring.parse('foo=bar&baz=qux&baz=quux&corge');

但后来做

if(queryData.foo) {...}

仅检查参数 'foo' 是否存在于 url 中,而不检查它是否在正确的位置

4

3 回答 3

3

您可以自己解析它,如下所示:

var qs = 'foo=bar&baz=qux&baz=quux&corge';
var parsed = qs.split('&').map(function (keyValue) {
    return keyValue.split('=');
});

这会给你类似的东西[ ['foo','bar'], ['baz', 'qux'], ['baz', 'quux'], ['corge', '' ],然后你可以检查第一个是否是你想要的:if (parsed[0][0] === 'foo')

您还可以检查此问题以自行解析:如何在 JavaScript 中获取查询字符串值?

或者您可以依赖以下事实:nodejs 将以接收到的相同顺序插入属性,而 v8 将保持该顺序(这并不可靠,它们可能会改变行为)if (Object.keys(queryData)[0] === 'foo'):。

或者您可以检查 foo 是否首先出现:

if (qs.indexOf('foo=') === 0)

或类似的东西if (qs.slice(0, 4) === 'foo')

于 2014-05-26T04:13:08.340 回答
0

你可能会更好地做一个老式的 string.split 因为它给你一个拆分元素的数组。然后您可以检查数组

如何拆分字符串,在特定字符处中断?

于 2014-05-26T04:04:57.860 回答
0

检查此代码是否适合您:

var querystring = require("querystring");
var obj =  querystring.parse('foo=bar&baz=qux&baz=quux&corge');

var rankOfObjects = {"0":"foo","1":"baz","2":"corge"};
var objArray = Object.keys(obj);

if(checkRank()){
    console.log("in order");
}else{
    console.log("not in order");
}

function checkRank(){
    for(var rank in objArray){
        if(objArray[rank]!=rankOfObjects[rank]){
             return false;
        }
     }
     return true
}
于 2014-05-26T04:24:58.497 回答