全棧項目|小書架|服務器開發-Koa2 參數校驗處理

爲何須要作參數校驗

在開發中,不管是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支持一波。


諮詢請加微信:輕撩便可。
在這裏插入圖片描述

相關文章
相關標籤/搜索