代码之家  ›  专栏  ›  技术社区  ›  Blackjack

快速验证器中的自定义响应

  •  0
  • Blackjack  · 技术社区  · 5 年前

    我正在使用Express Validator进行Rest API验证,下面是我在controller中的代码:

    validate: function (method){
        switch (method) {
            case 'createPersonalInfo': {
                return [
                    body('age').isInt().withMessage("Age should be integer")
                ]
            }
        }
    },
    

    它返回的响应为:

    {
        "status": 300,
        "messages": "Invalid Value",
        "param": {
            "errors": [
                {
                    "value": "ABC",
                    "msg": "Age should be integer",
                    "param": "age",
                    "location": "body"
                }
            ]
        }
    }
    

    我想自定义响应,如何删除字段 "location:" . 有可能吗?我看了很多文章,但没有一篇是关于它的。

    0 回复  |  直到 5 年前
        1
  •  0
  •   Mickael B.    5 年前

    您可以用express定义一个错误处理程序,在这个错误处理程序中,您可以检索这个错误,修改它并返回它。

    您可以通过以下方式检索路由处理程序中的验证错误:

    const { validationResult } = require('express-validator/check')
    
    app.get('/something', /* your validator middleware*/, function (req, res, next) {
      const errors = validationResult(req)
      if (!errors.isEmpty()) {
        errors.throw()
      }
    })
    
    
    

    错误处理程序在路由结束时按如下方式定义:

    app.use(function (err, req, res, next) {
      let details = err.mapped && err.mapped()
      let errorsParam = []
      if (details) {
        for (let param of Object.keys(details)) {
          errorsParam.push({ param, msg: details[param].msg, value: details[param].value })
        }
      }
      res.status(400).json({ message: err.message, errors: errorParam })
    })
    
        2
  •  0
  •   gustavohenke Fernando Lubianco    5 年前

    你可以用 validationResult().formatWith() 函数指定错误的格式化程序:

    const result = validationResult(req).formatWith(({ msg, param, value }) => ({
      msg,
      param,
      value
    }));
    

    也可以创建 validationResult() 始终使用给定的格式化程序:

    // Put it in a validation-result.js file somewhere in your project?
    const myValidationResult = validationResult.withDefaults({
      formatter: ({ msg, param, value }) => ({
        msg,
        param,
        value
      })
    });
    const result = myValidationResult(req);
    

    Docs