使用express,node.js中的未定义变量不会抛出任何错误

Rob*_*ohr 12 node.js express

我用express运行node.js.我在其中编写了一个包含方法的节点模块,因此当您访问 http://bla.com/module_name/method_name时 ,它将运行该方法.

该方法遵循典型的风格

exports.method_name(req, res, next);
Run Code Online (Sandbox Code Playgroud)

我的主应用程序执行以下操作:

app.all("*", resSetup, controller, render);
Run Code Online (Sandbox Code Playgroud)

和控制器是基于路径调用方法的东西.

似乎如果方法中存在未定义的变量错误,express将挂起并且不会抛出任何错误.控制台日志中也不会出现任何内容.我可以在错误发生之前和之后放置控制台消息,之前将出现在日志中,之后则不会.

我可以将它包装在try/catch中并获取:

[ReferenceError: blabla is not defined]
Run Code Online (Sandbox Code Playgroud)

但没有行号或任何东西.

我的猜测是快递以某种方式防止错误出现.当我将错误放在直接在路径中的名为"controller"的函数中时,它会正确显示错误.

这可能并不重要,但这是我正在处理的代码:

https://github.com/RobKohr/quick-site/blob/master/index.js

第189行是方法调用发生的地方.

kie*_*ans 0

  1. Express 严重依赖于 Node 的异步特性。如果我维护这个,看到像第 30 行这样抛出的错误会让我感到毛骨悚然。尝试重构您的代码以仅使用该next(err)模式。

  2. 您的应用程序挂起的原因是 Express 尚未完成HTTP 响应(例如:res.send())。这意味着您已经破坏了管道,其中错误已在调用堆栈中冒泡,但未重定向到 Express 中间件管道。尝试注册一些错误中间件,看看它是否会因您的错误而被调用。