【问题标题】:Custom response in Express ValidatorExpress Validator 中的自定义响应
【发布时间】:2019-09-24 11:49:50
【问题描述】:

我正在使用 Express Validator 进行 Rest API 验证,这是我在控制器中的代码:

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:"。可能吗?我一直在寻找很多文章,但没有一篇关于它的文章。

【问题讨论】:

    标签: express express-validator


    【解决方案1】:

    你可以用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 })
    })
    

    【讨论】:

    • 你为什么建议在路由中这样做?我很难做到,因为我在一个名为 index.js 的文件中定义了所有路由。如果我有超过 50 个路由,它将包含数千行代码。
    【解决方案2】:

    您可以使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      相关资源
      最近更新 更多