【发布时间】:2021-06-30 23:41:14
【问题描述】:
我正在尝试在 express 中使用 next() 将错误传递给以下路由中的自定义中间件:
app.post("/api/persons", (req, res) => {
const findPerson = Person.findOne({ name: req.body.name });
if (findPerson.length) {
res.status(404).json({ error: "Name already exists" });
} else if (req.body && req.body.name && req.body.number) {
const person = new Person({
name: req.body.name,
number: req.body.number,
});
person
.save()
.then((savedPerson) => {
console.log("saved successfully.");
res.json(savedPerson).end();
})
.catch((err) => next(err));
app.use(morgan("tiny"));
} else {
res.status(404).json({ error: "Name or number missing" });
}
});
我已经定义了中间件函数如下:
const errorHandler = (error, request, response, next) => {
console.error(error.message);
if (error.name === "CastError") {
return response.status(400).send({ error: "malformatted id" });
}
next(error);
};
app.use(errorHandler);
在所有其他 app.use() 之后,我将此中间件添加到文件的最后。 但我不断收到如下参考错误:
UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch().
即使我清楚地使用了 catch 块,它似乎也会抛出错误。 我尝试将错误处理程序的定义添加到顶部,但它仍然显示相同的错误。
【问题讨论】:
标签: javascript node.js express