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