node的api接口加表单校验

1.准备好校验规则

//1.非空 2.只能是数字 3.手机号 4.长度
const ajv = {
    'required':function(v,vail){
        if(!v||Array.isArray(v)||!v.length){
            return vail.title+'不能为空'
        }
    },
    'mobile':function(v,vail){
        if(v){
            if(/^1\d{10}$/.test(v)){
                return true
            }
            return vail.title+'格式有误'
        }
    },
    'number':function(v,vail){
        if(v){
            if(/^[0-9]+$/.test(v)){
                return true
            }
            return vail.title+'只能是数字'
        }
    },
    'length':function(v,vail){
        if(vail){
            let len = v.length
            let min = vail.minLength
            let max = vail.maxLength
            if(min&&min===-1){
                if(len>max){
                    return vail.title+'必须少于'+max+'个字符'
                }
            }else if(max&&max===-1){
                return vail.title+'必须大于'+min+'个字符'
            }else{
                if(len>max||len<min){
                    return vail.title+`长度必须在${min}~${max}个字符`
                }
            }
        }
    }
}


/**
 * @param {Object} schema json schema 规则
 * @param {Object} data 待校验的数据
 */
function validator(schema, data = {}) {
    let errors = []
    //需要校验的数据遍历
    for(let key in schema){
        //循环规制
        for(let i=0;i<schema[key].rule.length;i++){
            let name = schema[key].rule[i]
            //如果规制存在且命中
            if(ajv[name]){
                let st = ajv[name](data[key],schema[key])
                if(st!==undefined){
                    errors.push(st)
                }
            }
        }
    }
    if(errors.length>0){
        return errors[0]
    }
    return false
}
module.exports = validator

  

2.接收参数,进行校验,返回错误信息

//接口的校验规则
let vailJson = { title:{ rule:['required','length'], title:'标题', minLength:2, maxLength:20 } } //data是接收到的参数 //进行校验,如果有返回提示信息就返回页面 let msg = validator(vailJson,data) if(msg){ ctx.body = CommonSend.err(msg) return }

  

posted @ 2021-02-28 22:22  fm060  阅读(153)  评论(0编辑  收藏  举报