[英]'this' vs. 'bind.(this)' vs. passing an event to an event handler, React JS vs. vanilla JavaScript
[英]Error Handler vs. Unknown Endpoints in Express
我目前在用 express 构建的后端服务器中有以下代码。 查看这段代码,我本以为第 11 行对next(error)
的调用会首先命中app.use(unknownEndpoint)
中间件,从而导致向客户端发送{ error: "unknown endpoint" }
消息。
但是,它确实执行了错误处理程序中的代码。 我认为我对 Express 的理解有些不对劲,但我不确定是什么。
据我了解,所有中间件都是按顺序执行的。 那么这是否意味着每次出现错误时unknownEndpoint
都会在我们到达错误处理程序之前执行?
app.get("/api/notes/:id", (request, response) => {
Note.findById(request.params.id)
.then((note) => {
if (note) {
response.json(note);
} else {
response.status(404).end();
}
})
.catch((error) => {
next(error);
});
});
const unknownEndpoint = (request, response) => {
response.status(404).send({ error: "unknown endpoint" });
};
app.use(unknownEndpoint);
const errorHandler = (error, request, response, next) => {
console.error(error.message);
if (error.name === "CastError") {
return response.status(400).send({ error: "malformated id" });
}
next(error);
};
app.use(errorHandler);
Express 能够通过检查它们的数量(即参数的数量)来区分常规中间件和错误中间件。
它作为本段的详细信息出现在文档中: https://expressjs.com/en/guide/error-handling.html#writing-error-handlers
以与其他中间件函数相同的方式定义错误处理中间件函数,除了错误处理函数有四个 arguments 而不是三个:(err, req, res, next)。
因此,如果您调用next(err)
,Express 会在其内部中间件列表中查找具有 4 arguments 的中间件来执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.