全棧項目|小書架|服務器開發-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支持一波。


咨詢請加微信:輕撩即可。
在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM