在開發中,不管是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
支持一波。
諮詢請加微信:輕撩便可。