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 }

浙公网安备 33010602011771号