我尽力确保我的代码中没有错误,但偶尔会出现未捕获的异常并导致我的应用程序崩溃。
我可以用它来杀死应用程序,而是将其输出到某个地方的文件,然后尝试恢复它停止的应用程序 - 或者静静地重启并向应用程序上的所有用户显示一条消息出错了,并在它自行排除时给它一秒钟。
如果应用程序没有运行,如果它可以将其重定向到某个“#34;应用程序未运行的地方”,那么它就会很好,请联系让我知道&#34 ;或类似的东西。
我可以使用process.on(' uncaughtException')... - 但这是正确的做法吗?
非常感谢您花时间阅读本文,感谢您对此事的帮助和想法。
答案 0 :(得分:1)
崩溃后你实际上无法恢复,至少没有专门为此目的编写的代码,比如定义状态和一切。
否则使用clusters重新启动应用。
// ... 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);
我应该注意什么,例如说连接到数据库时出错并且我没有处理这个问题,因此应用程序一直处于崩溃状态 - 它会不会继续尝试分叉并占用所有系统资源?
我之前没想过这个问题。听起来很关心。
通常错误是用户发起的,所以预计不会导致这样的问题。
也许数据库没有连接问题,并且在代码实际用于创建分支之前,应该处理其他不可恢复的错误。
mongoose.connection.on('open', function() {
// create forks here
});
mongoose.connection.on('error', function() {
// don't start the app if database isn't working..
});
或许应该识别出这样的错误,不应该创建叉子。但你可能必须事先知道那些错误,所以你可以处理它们。