今天在用nodejs开发后台的时候遇到了一个问题,就是在修改信息的时候怎么验证参数,这里既要验证参数的可修改性,又要验证参数的合法性,于是我就写了个方法来验证,思路大概是这样的,建立一个数组,里面食是参数为key的字典,字典里面包含了几种属性
- 是否必须存在 required
- 是否可为空 allowNull
- 长度限制 Maxlength
这样做的话保证了所传递的参数必须在数组之内,防止其他的非法参数,如果检测到非允许修改的参数传递进来,直接返回500。
这里最简单的例子
在我们修改个人信息的时候,我们只允许修改姓名和电话号码,所以我们设置一个列表来进行过滤
{
"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) {
//判断参数是否存在
if(!args[i]){
console.log("缺少参数"+i);
return false;
}
}
}
//判断参数是否在允许的列表中
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
输出结果
{ name: 'chenhao' }
false
true
缺少参数phone
可以看到提示缺少phone
输入:
name:chenhao,
phone:188888888888
输出:
{ name: 'chenhao', phone: '188888888888' }
false
true
false
args too long
提示参数长度超过限制
输入:
name:chenhao,
phone:188888888888,
gender:man
输出:
{ name: 'chenhao', phone: '1888888888', gender: 'man' }
false
true
false
invalid args
这里看到检测到了非法的gender参数
以上就是最简单的参数检查,我这里在对检验失败后统一进行了错误500的返回,也可以是自动过滤掉非法的参数而不返回错误。这个方法可以根据实际情况进行扩展,比如加上isEmail,isNumber等各种扩展。