express-validator

  • [ validator ]
  • [ express-validator 官方文档 ]
  • [ express-validator 都包含什么 ]
  •   npm i validator express-validator
      ---
      const v = require('express-validator')
      for(let k in v) {
        console.log(k)
      }
      /* result: */
      // checkSchema
      // checkExact
      // oneOf
      // buildCheckFunction
      // check
      // body
      // cookie
      // header
      // param
      // query
      // matchedData
      // validationResult
      // Result
      // ExpressValidator
    
    • 其中 body cookie header param query 都是验证规则制定函数,他们会返回一个中间件,该中间件包含了一系列可以返回中间件自身的验证方法,从而可以实现链式调用。
    • 该中间件具有一个 run 方法,需要传入 req, 会返回一个 promise, 这在写自定义 validator验证器的时候会用到
    • 这些中间件分别用来配置对请求体包含的各个部分数据的验证规则
    • matchedData 是一个方法,传入 req 返回被验证的数据所组成的对象
    • validationResult 是一个方法,需要传入 req 请求体作为参数,返回一个对象 result
    • result.isEmpty() 返回一个是否存在违反验证规则数据的存在
    • result.array() 返回一个数组,数组中包含违反验证规则的数据信息,结构如下:
      [
        {
          "location": "query",
          "msg": "Invalid value"
          "path": "person",
          "type": "field"
        }
      ]
    

  • [ 组织和手动运行验证器 ]
  •   // middleware
      module.exports = function validator(validations) {
        return async (req, res, next) {
          await Promise.all(validations => {
            validation.run(req)
          })
          const result = validationResult(req)
          if(result.isEmpty()) return next()
          res.status(500).json({errors: result.array()})
        }
      }
    
      // validators
      const validator = require('.../validator')
      exports.loginValidator = validator([
        body('username')
          .trim()
          .isEmpty().withMessage('用户名不能为空')
          .cuntom(async (value, {req}) => {
            const user = await fn()// get user by username
            if(user) {
              return Promise.reject('用户名已经存在')
            }
          }),
        body('password') // code ...
      ])
    

  • [ buildCheckFunction ]
    • 该方法可以生成一个自定义验证规则函数,类似于 express-validator 的 body 自定义方法
    • 接受一个参数 location,也就是 'boxy' | 'cookies' | 'headers' | 'params' | 'query' 或者由它们组成的数组
      const isYourGirl = buildCheckFunction(['query, params'])
      // isYourGirl 就相当于同时在 query 和 params 中查找被验证数据
    
      app.get('/isyourgirl', isYourGirl('girlname').custom(value => ...))
    
    posted @   anch  阅读(28)  评论(0编辑  收藏  举报
    点击右上角即可分享
    微信分享提示