在开发中,不管是App
开发仍是服务器接口
开发, 咱们没法去预测用户传入的数据,所以参数(数据)校验
是开发中不可或缺的一环。git
例如像App
的注册登陆表单提交页面,就要作好多层的判断。如:用户名是否为空,用户密码是否为空,密码长度是否足够等等
。github
那么有没有比较优雅的方式实现呢?npm
这里使用的是基于validator.js封装的Lin-Validator
,源码是七月老师
提供。json
Lin-Validator
拥有的功能:数组
header,query,path,body
中的全部参数校验验证器声明:服务器
const { LinValidator, Rule } = require('lin-mizar'); /** * 正整数 参数校验 */ class PositiveIntegerValidator extends LinValidator { constructor() { // 使用 this 必定要使用 super super() // 数组,且关系,也就是数组中全部都知足才能经过 this.id = [ new Rule('isInt', '须要是正整数', { min: 1 }), ] } } /** * 更新用户信息 */ class UpdateInfoValidator extends LinValidator { constructor () { super(); this.email = [ new Rule('isOptional'), new Rule('isEmail', '电子邮箱不符合规范,请输入正确的邮箱') ]; this.nickname = [ new Rule('isOptional'), new Rule('isLength', '昵称长度必须在2~10之间', 2, 10) ] } } module.exports = { PositiveIntegerValidator, UpdateInfoValidator };
自定义别名使用微信
// 获取书籍的喜欢状态 router.get('/like', new Auth().m, async ctx => { // 接口中传递的参数是`bkid`,为了复用 PositiveIntegerValidator 对 id 的校验 // 这里使用了自定义别名 id: 'bkid' 来完成验证器的调用 const v =await new PositiveIntegerValidator().validate(ctx, { id: 'bkid' }) const like = await Like.userLikeIt( ctx.auth.uid, v.get('query.bkid')) ctx.body = like })
可经过npm
安装使用lin-mizarapp
在package.json
中添加lin-mizar
的初始化便可:koa
"dependencies": { "lin-mizar": "^0.2.1" }
在要使用校验器的文件引入async
const { Rule, LinValidator, isNotEmpty } = require('lin-mizar');
【详细使用参考:TaleLin/lin-cms-koa中的/app/validators/
】,方便的话顺手点个star
支持一波。
咨询请加微信:轻撩便可。