Express-Validator "validationResult" returns [object 对象]
Express-Validator "validationResult" returns [object Object]
我正在修改 Express-Validator 中间件的错误处理以通过我的自定义错误处理中间件,但是 validationResult
的消息解析为 [object Object]
。
Express-Validator 错误处理
const expressValidationError = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const err = new Error(errors.array());
err.status = 400;
next(err);
} else {
next();
}
};
Express 错误处理中间件
app.use((err, req, res, next) => {
const status = err.status || 500;
res.status(status).json({
error: {
status: status,
message: err.message || "Internal Server Error",
},
});
});
这是从 validationResult
返回的 error
对象的结果:
Result {
formatter: [Function: formatter],
errors: [
{
value: 'b',
msg: 'Username Must be Between 5 to 255 Characters Long!',
param: 'username',
location: 'body'
}
]
}
这是errors.array()
:
[
{
value: 'b',
msg: 'Username Must be Between 5 to 255 Characters Long!',
param: 'username',
location: 'body'
}
]
我知道我可以在 Express-Validator 中使用 res.status(400).json({ error: errors.array() });
并避免所有这些,但我更愿意将其传递给 next()
并由错误中间件处理。
有什么方法可以这样做还是我应该换一种方式?
如果你看到下面的代码,这就是正在发生的事情。您正在传递一个对象数组。
let status = new Error([{}]);
console.log(status); // Error: [object Object]
现在,当您检查验证对象时,它是这样的:
// errors will be like
[{ myLocation: 'body' }, { myLocation: 'query' }...]
所有你必须把它变成一个字符串:
const expressValidationError = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
// below is only useful when you don't have array of objects
// const err = new Error(errors.array().toString());
const err = new Error(errors.array().map(el => el['msg']).toString());
err.status = 400;
next(err);
} else {
next();
}
};
添加哪个键有什么验证错误:
const expressValidationError = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
// below is only useful when you don't have array of objects
// const err = new Error(errors.array().toString());
const err = new Error(errors.array().map(el => `${el[param]} - has Error: ${el['msg']}`).toString());
err.status = 400;
next(err);
} else {
next();
}
};
问题不在于验证器,而是 Error
对象将字符串参数作为第一个参数,而您向它传递的是一个对象(数组),因此是 object object
。
所以JSON.stringify对象:
const err = new Error(JSON.stringify(errors.array()));
我正在修改 Express-Validator 中间件的错误处理以通过我的自定义错误处理中间件,但是 validationResult
的消息解析为 [object Object]
。
Express-Validator 错误处理
const expressValidationError = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
const err = new Error(errors.array());
err.status = 400;
next(err);
} else {
next();
}
};
Express 错误处理中间件
app.use((err, req, res, next) => {
const status = err.status || 500;
res.status(status).json({
error: {
status: status,
message: err.message || "Internal Server Error",
},
});
});
这是从 validationResult
返回的 error
对象的结果:
Result {
formatter: [Function: formatter],
errors: [
{
value: 'b',
msg: 'Username Must be Between 5 to 255 Characters Long!',
param: 'username',
location: 'body'
}
]
}
这是errors.array()
:
[
{
value: 'b',
msg: 'Username Must be Between 5 to 255 Characters Long!',
param: 'username',
location: 'body'
}
]
我知道我可以在 Express-Validator 中使用 res.status(400).json({ error: errors.array() });
并避免所有这些,但我更愿意将其传递给 next()
并由错误中间件处理。
有什么方法可以这样做还是我应该换一种方式?
如果你看到下面的代码,这就是正在发生的事情。您正在传递一个对象数组。
let status = new Error([{}]);
console.log(status); // Error: [object Object]
现在,当您检查验证对象时,它是这样的:
// errors will be like
[{ myLocation: 'body' }, { myLocation: 'query' }...]
所有你必须把它变成一个字符串:
const expressValidationError = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
// below is only useful when you don't have array of objects
// const err = new Error(errors.array().toString());
const err = new Error(errors.array().map(el => el['msg']).toString());
err.status = 400;
next(err);
} else {
next();
}
};
添加哪个键有什么验证错误:
const expressValidationError = (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
// below is only useful when you don't have array of objects
// const err = new Error(errors.array().toString());
const err = new Error(errors.array().map(el => `${el[param]} - has Error: ${el['msg']}`).toString());
err.status = 400;
next(err);
} else {
next();
}
};
问题不在于验证器,而是 Error
对象将字符串参数作为第一个参数,而您向它传递的是一个对象(数组),因此是 object object
。
所以JSON.stringify对象:
const err = new Error(JSON.stringify(errors.array()));