繁体   English   中英

错误处理程序与 Express 中的未知端点

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM