多次调用 next(err)

calling next(err) multiple time

提问人:mee_gee 提问时间:10/13/2023 更新时间:10/13/2023 访问量:21

问:

首先,如果这不是一个好问题,我很抱歉,因为我对 node 和 express js 非常陌生。现在

在我的路由处理程序中使用错误中间件并多次调用 next(err) 时,Express 代码的流程是什么

app.get("/", (req, res, next) => {
  // const err = new Error("An example error");
  console.log("pass 1");
  next("m1"); // First time the error is passed
  console.log("pass 2");
  next("m2"); // Second time the error is passed
});

app.use((err, req, res, next) => {
  console.log("error middleware called");
  res.json({ message: "error here" });
});

我以为我会调用错误中间件 2 次,但它给出了这个\

pass 1
error middleware called
pass 2
GET / 200 3.668 ms - 24
m2

那么代码的流程是什么呢?谢谢

Node.js Express 错误处理 中间件

评论

0赞 jfriend00 10/13/2023
每个请求只能调用一次。不要为同一个请求多次调用它。Express 将防止为同一请求多次调用错误中间件,因为您不应该多次调用它。next(err)
0赞 mee_gee 10/13/2023
那么,您能告诉我当 next(err) 第二次调用时,Express 将如何处理它(如何只打印“M2”而不是“M1”)?另外,将字符串传递给 next() 时有什么区别(不使用 try() catch() 块),因为我从文档中知道错误 obj 应该传递给 next() 并且 next() 必须驻留在 catch 块中
0赞 jfriend00 10/14/2023
如果你想知道 Express 是如何计算的,你必须在调试器中逐步完成这段代码,看看 Express 是如何做到的,或者在 Github 上研究 Express 代码。关键是,你不应该多次打电话。我的猜测是 Express 存储响应的错误,但异步发送,因此如果您多次同步设置错误,则最后一个集合会覆盖前一个错误,并且是实际发送的错误。但是,这只是一个猜测。如果您想确切地知道,则必须研究代码以了解它是如何做到的。next(err)

答: 暂无答案