全栈项目|小书架|服务器开发-Koa2 参数校验处理

为什么需要做参数校验

在开发中,无论是App开发还是服务器接口开发, 我们无法去预测用户传入的数据,因此参数(数据)校验是开发中不可或缺的一环。

例如像App的注册登录表单提交页面,就要做好多层的判断。如:用户名是否为空,用户密码是否为空,密码长度是否足够等等

那么有没有比较优雅的方式实现呢?

如何优雅实现

这里使用的是基于validator.js封装的Lin-Validator,源码是七月老师提供。

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-mizar

package.json中添加lin-mizar的初始化即可:

"dependencies": {
"lin-mizar": "^0.2.1"
}

在要使用校验器的文件引入

const { Rule, LinValidator, isNotEmpty } = require('lin-mizar');

详细使用参考:TaleLin/lin-cms-koa中的/app/validators/】,方便的话顺手点个star支持一波。


咨询请加微信:轻撩即可。

全栈项目|小书架|服务器开发-Koa2 参数校验处理

上一篇:JSON Web Token - 在Web应用间安全地传递信息


下一篇:Android如何使用WebView访问https的网站