我正在修改 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();
}
};
快速錯誤處理中間件
app.use((err, req, res, next) => {
const status = err.status || 500;
res.status(status).json({
error: {
status: status,
message: err.message || "Internal Server Error",
},
});
});
這是error從回傳的物件的結果validationResult:
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'
}
]
我知道我可以只res.status(400).json({ error: errors.array() });在 Express-Validator 中使用并避免所有這些,但我希望它被傳遞給next()錯誤中間件并由錯誤中間件處理。
有什么辦法可以這樣做,還是我應該選擇另一種方式?
uj5u.com熱心網友回復:
問題不在于驗證器,而是該Error物件將字串引數作為第一個引數,并且您將其傳遞給物件(陣列),因此object object.
所以 JSON.stringify 物件:
const err = new Error(JSON.stringify(errors.array()));
uj5u.com熱心網友回復:
如果您看到下面的代碼,這就是正在發生的事情。您正在傳遞一個物件陣列。
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();
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/440867.html
標籤:javascript 节点.js 表示 快速验证器
