[英]How do I enforce a check for a particular sequence of parameters in the querystring of an http request handled by a node.js server?
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”,而不是在正確的位置
您可以自己使用以下內容解析它:
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')
您最好做一個老式的string.split,因為它為您提供了一系列拆分元素。 然后您可以檢查陣列
檢查此代碼是否對您有用:
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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.