今天在用nodejs開發(fā)后臺的時候遇到了一個問題,就是在修改信息的時候怎么驗證參數(shù),這里既要驗證參數(shù)的可修改性,又要驗證參數(shù)的合法性,于是我就寫了個方法來驗證,思路大概是這樣的,建立一個數(shù)組,里面食是參數(shù)為key的字典,字典里面包含了幾種屬性
- 是否必須存在 required
- 是否可為空 allowNull
- 長度限制 Maxlength
這樣做的話保證了所傳遞的參數(shù)必須在數(shù)組之內(nèi),防止其他的非法參數(shù),如果檢測到非允許修改的參數(shù)傳遞進來,直接返回500。
這里最簡單的例子
在我們修改個人信息的時候,我們只允許修改姓名和電話號碼,所以我們設(shè)置一個列表來進行過濾
{
"key":[是否必須,最大長度]
}
var enableList = {
"name": [false, 0],
"phone": [true, 11]
}
這里我們讓姓名為非必填,長度不限制,電話號碼為必填,最大長度為11位。
檢驗的方法為
//check required
for(var i in rules){
console.log(rules[i][0]);
if(rules[i][0] == true) {
//判斷參數(shù)是否存在
if(!args[i]){
console.log("缺少參數(shù)"+i);
return false;
}
}
}
//判斷參數(shù)是否在允許的列表中
for (var i in args) {
if(!rules[i]){
console.log("invalid args");
return false;
}
//限制長度
if(rules[i][1]!=0){
if(args[i].length>rules[i][1]) {
console.log("args too long");
return false;
}
}
}
return true;
我們來進行一下測試
輸入
name:chenhao
輸出結(jié)果
{ name: 'chenhao' }
false
true
缺少參數(shù)phone
可以看到提示缺少phone
輸入:
name:chenhao,
phone:188888888888
輸出:
{ name: 'chenhao', phone: '188888888888' }
false
true
false
args too long
提示參數(shù)長度超過限制
輸入:
name:chenhao,
phone:188888888888,
gender:man
輸出:
{ name: 'chenhao', phone: '1888888888', gender: 'man' }
false
true
false
invalid args
這里看到檢測到了非法的gender參數(shù)
以上就是最簡單的參數(shù)檢查,我這里在對檢驗失敗后統(tǒng)一進行了錯誤500的返回,也可以是自動過濾掉非法的參數(shù)而不返回錯誤。這個方法可以根據(jù)實際情況進行擴展,比如加上isEmail,isNumber等各種擴展。