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.. });
或者,也许应该确定这样的错误,不应该创造叉子。 但是,你可能需要事先知道那些错误,所以你可以处理它们。