Node.js 发生快速错误时,pm2不会重新启动工作进程

Node.js 发生快速错误时,pm2不会重新启动工作进程,node.js,express,error-handling,uncaught-exception,pm2,Node.js,Express,Error Handling,Uncaught Exception,Pm2,我正在使用pm2管理我的nodejs express应用程序(在集群模式下运行)中的流程 我们有两种错误处理程序 首先:“uncaughtException”将通过 process.on('uncaughtException', function(err){}); 实际上,我没有声明这样的处理程序,因为在这种情况下,pm2会检测到死亡的工人,所以会自动重新启动死亡的工人 第二:express error handler,我的意思是错误将被转发到express error handler

我正在使用pm2管理我的nodejs express应用程序(在集群模式下运行)中的流程

我们有两种错误处理程序

  • 首先:“uncaughtException”将通过

    process.on('uncaughtException', function(err){});
    
实际上,我没有声明这样的处理程序,因为在这种情况下,pm2会检测到死亡的工人,所以会自动重新启动死亡的工人

  • 第二:express error handler,我的意思是错误将被转发到express error handler,而不是uncaughtException handler,错误处理程序如下所示

    app.use(function(err, req, res, next) {})
    
我也没有为了与uncaughtException相同的目的声明此错误处理程序。 但在这种情况下,pm2不会重新启动节点

你知道这个问题吗?
非常感谢

当使用express错误处理程序捕获错误,甚至“uncaughtException”事件时,进程仍在运行,因此pm2不会重新启动它。 如果您希望pm2在每次异常后重新启动,我建议如下:

    process.on('uncaughtException', function(e) {
      console.log('An error has occured. error is: %s and stack trace is: %s', e, e.stack);
      console.log("Process will restart now.");
      process.exit(1);
    })

express错误处理程序也是如此。当我们执行process.exit方法时,进程将终止,pm2将重新启动它。

当使用快速错误处理程序或甚至“uncaughtException”事件捕获错误时,进程仍在运行,因此pm2不会重新启动它。 如果您希望pm2在每次异常后重新启动,我建议如下:

    process.on('uncaughtException', function(e) {
      console.log('An error has occured. error is: %s and stack trace is: %s', e, e.stack);
      console.log("Process will restart now.");
      process.exit(1);
    })

express错误处理程序也是如此。当我们执行process.exit方法时,进程将终止,pm2将重新启动它。

是否确实需要重新启动您的应用程序?如果我没有弄错的话,该应用程序仍在运行,可以响应新的请求。由于捕获到异常,您应该在express error handler中使用一些漂亮的页面来响应问题,而不是让客户端浏览器超时。是的,当express error handler捕获错误时,服务器不会崩溃。但,异常意味着您的代码中存在一些问题,可能服务器将进入不稳定状态,您无法知道它将来会对请求做出什么反应。我认为在这种情况下,我们应该重新启动此节点。然后,您可以在记录发生的情况后,在错误处理程序中尝试process.exit(0)。pm2应该重新启动它。是的,我刚刚做了,现在一切都好了。你的应用真的需要重新启动吗?如果我没有弄错的话,该应用程序仍在运行,可以响应新的请求。由于捕获到异常,您应该在express error handler中使用一些漂亮的页面来响应问题,而不是让客户端浏览器超时。是的,当express error handler捕获错误时,服务器不会崩溃。但,异常意味着您的代码中存在一些问题,可能服务器将进入不稳定状态,您无法知道它将来会对请求做出什么反应。我认为在这种情况下,我们应该重新启动此节点。然后,您可以在记录发生的情况后,在错误处理程序中尝试process.exit(0)。pm2应该重新启动。是的,我刚刚做了,现在一切都好了。