为什么我得到未处理的承诺错误使用express-validator



我遇到了一个与我正在构建的api的express-validator处理错误的问题。我得到了它的工作,但我不明白为什么最初的代码不工作,想知道是否有人可以为我解释它?

我在路由上使用express-validator检查中间件,如下所示:

router.put(
"/sign-up",
[
check("name", "Invalid Name").trim().isLength({ min: 1 }),
check("email", "Invalid Email")
.isEmail()
.isLength({ min: 1 })
.normalizeEmail(),
],
userController.putUser
);

然后在控制器中,我有下面的代码来处理,以防出现错误:

exports.putUser = async (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
// const err = new Error("Validation Failed!");
// err.data = errors.array();
// err.statusCode = 422;
// throw err;
return res
.status(422)
.json({ message: "Validation Failed!", data: errors.array() });
}
// .... do more stuff here

所以被注释掉的部分是我最初的尝试,它不起作用,而只处理if语句中的响应根据我的情况工作。我想把新的错误漏斗到我的错误处理中间件在我的app.js文件中,看起来像这样:

app.use((err, req, res, next) => {
return res.status(err.statusCode).json({ errorMessage: err.message, data: err.data });
});

我得到的错误是"未处理的承诺错误"。在我的控制器函数中使用注释掉的代码时。谁能帮助我理解为什么返回响应立即工作,但抛出错误没有?

谢谢你的帮助!

在这行你定义了exports.putUser = async (req, res, next)所以putUser必须返回promise因为类型是async但是你返回别的东西

return res.status(422).json(
{ message: "Validation Failed!", data: errors.array() });

在你的情况下,你必须删除return,这样做

res.status(422).json(
{ message: "Validation Failed!", data: errors.array() });

最新更新