Express Validator中的自定义响应

时间:2019-07-15 10:26:50

标签: express express-validator

我正在使用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:"。可能吗?我一直在看很多文章,但没有人发表。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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