美文网首页
nodejs参数验证

nodejs参数验证

作者: HarriesChen | 来源:发表于2015-05-18 02:24 被阅读1735次

    今天在用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等各种扩展。

    相关文章

      网友评论

          本文标题:nodejs参数验证

          本文链接:https://www.haomeiwen.com/subject/hstlqttx.html