【发布时间】:2015-11-11 04:01:32
【问题描述】:
我正在使用 pm2 来管理我的 nodejs express 应用程序中的进程(以集群模式运行)。
我们有两种错误处理程序
-
FIRST: 'uncaughtException' 将被处理
process.on('uncaughtException', function(err){});
实际上,我并没有声明这样的处理程序,因为在这种情况下让 pm2 检测到死掉的工人,所以自动重启死掉的工人。
-
SECOND:表示错误处理程序,我的意思是错误将被转发到表示错误处理程序,而不是 uncaughtException 处理程序,错误处理程序如下所示
app.use(function(err, req, res, next) {})
我也没有出于与 uncaughtException 相同的目的声明此错误处理程序。 但是这种情况下 pm2 不会重启节点。
对这个问题有任何想法吗? 非常感谢
【问题讨论】:
-
真的需要重启你的应用吗?如果我没记错的话,该应用程序仍在运行并且可以响应新请求。由于捕获到异常,您应该在快速错误处理程序中响应一些漂亮的页面,说明存在问题,而不是让客户端的浏览器超时。
-
是的,当错误被快速错误处理程序捕获时,服务器不会崩溃。但是,异常意味着您的代码中存在一些问题,并且服务器可能会进入不稳定状态,您无法知道它将来会对请求做出什么反应。我认为在这种情况下,我们应该重启这个节点。
-
然后您可以在记录发生的情况后在错误处理程序中尝试 process.exit(0)。 pm2 应该重新启动它。
-
是的,我刚刚这样做了,现在一切正常。
标签: node.js express error-handling uncaught-exception pm2