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 }