原代码:
form.parse(req, async (err, fields, files) => {
await Article.create({
title: fields.title,
author: fields.author,
publishDate: fields.publishDate,
cover: files.cover.path.split("public")[1],
content: fields.content,
});
// 将页面重定向到文章列表页面
res.redirect("/admin/article");
});
出现问题:没有对 Promise 的 rejection 进行处理,验证失败
经网络查找,是因为没有对异步函数进行错误处理
“async 异步函数返回的是 Promise,所以执行异步函数后,统一需要用 .catch() 对可能出现的 rejection 进行捕捉处理,否则统一也是会出现 UnhandledPromiseRejectionWarning 的警告”
查找链接:
详细解释1
详细解释2
一开始陷入了一个死角,因为写的异步函数没有名字而且作为第二个参数,不能用 函数名.catch(),所以忘记了最基本的try-catch,有点傻
解决方法:用try-catch加上异步错误处理
form.parse(req, async (err, fields, files) => {
try {
await Article.create({
title: fields.title,
author: fields.author,
publishDate: fields.publishDate,
cover: files.cover.path.split("public")[1],
content: fields.content,
});
// 将页面重定向到文章列表页面
res.redirect("/admin/article");
} catch {
console.log(err);
}
});
成功解决