Express 4 / Node JS – 非常好地pipe理uncaughtException

我尽我所能确保我的代码中没有错误,但是偶尔会有一个未捕获的exception来杀死我的应用程序。

我可以用它做,而不是杀死应用程序,而是将其输出到某个文件,然后尝试从应用程序停止的位置恢复 – 或者静静地重新启动,并向应用程序中的所有用户显示出错信息,给它一秒钟,而它自行sorting。

如果应用程序没有运行,它会很好,如果它可以redirect到某个地方,说“该应用程序没有运行,取得联系,让我知道”或类似的东西。

我可以使用process.on('uncaughtException')… – 但这是正确的事情吗?

非常感谢您花时间阅读本文,感谢您对此事的帮助和想法。

在崩溃之后,你不能真正恢复,至less没有专门为此目的而编写的代码,比如定义状态和一切。

否则,使用群集重新启动应用程序。

// ... your code ... var cluster = require('cluster'); process.on('uncaughtException', function(err){ //.. do with `err` as you please cluster.fork(); // start another instance of the app }); 

当它分叉时,它是如何影响用户的 – 它们在切换时是否遇到延迟?

集群通常用于在任何时候继续运行多个节点应用程序的副本,以便在其中一个工作人员重新生成时,其他人仍然处于活动状态并防止任何延迟。

 if (cluster.isMaster) require('os').cpus().forEach(cluster.fork); cluster.on('exit', cluster.fork); 

有什么我应该注意的,例如说有一个连接到数据库的错误,我没有把一个处理程序来处理,所以应用程序不断崩溃 – 它会继续尝试叉和猪所有的系统资源?

在此之前,我其实并没有想过这个问题。 听起来很好,

通常这些错误是由用户引起的,所以不会引起这样的问题。

也许数据库没有连接的问题,和其他这样的不可恢复的错误应该在代码实际进入创build叉之前处理。

 mongoose.connection.on('open', function() { // create forks here }); mongoose.connection.on('error', function() { // don't start the app if database isn't working.. }); 

或者,也许应该确定这样的错误,不应该创造叉子。 但是,你可能需要事先知道那些错误,所以你可以处理它们。