Express 4 / Node JS - 优雅地管理 uncaughtException
Express 4 / Node JS - Gracefully managing uncaughtException
我尽力确保我的代码中没有错误,但偶尔会出现未捕获的异常并终止我的应用程序。
我可以用它不杀死应用程序,而是将它输出到某处的文件,并尝试从它停止的地方恢复应用程序 - 或者安静地重新启动并向应用程序上的所有用户显示一条好消息出了点问题,稍等片刻,它会自行解决。
如果应用程序不是 运行,最好能将其重定向到显示 "The app isn't running, get in touch to let me know" 或类似内容的地方。
我可以使用 process.on('uncaughtException') ... - 但这样做正确吗?
非常感谢您花时间阅读本文,感谢您对此事的帮助和想法。
您无法在崩溃后真正恢复,至少没有专门为此目的编写的代码,例如定义状态和所有内容。
否则使用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
});
When it forks, how does it affect the users - do they experience any latency while it's switching?
集群通常用于始终保持 运行 多个节点应用程序副本,这样当其中一个工作人员重生时,其他工作人员仍然处于活动状态并防止任何延迟。
if (cluster.isMaster)
require('os').cpus().forEach(cluster.fork);
cluster.on('exit', cluster.fork);
Is there anything that I should look out for, e.g. say there was an error connecting to the database and I hadn't put in a handler to deal with that, so the app kept on crashing - would it just keep trying to fork and hog all the system resources?
我以前其实没有想过这个问题。听起来不错。
通常错误是由用户引起的,因此预计不会导致此类问题。
也许数据库未连接问题,以及其他此类 不可恢复的 错误应该在 代码实际进入创建分叉之前处理。
mongoose.connection.on('open', function() {
// create forks here
});
mongoose.connection.on('error', function() {
// don't start the app if database isn't working..
});
或者也许应该识别此类错误并且不应创建分叉。但是您可能必须事先知道可能是哪些错误,以便您可以处理它们。
我尽力确保我的代码中没有错误,但偶尔会出现未捕获的异常并终止我的应用程序。
我可以用它不杀死应用程序,而是将它输出到某处的文件,并尝试从它停止的地方恢复应用程序 - 或者安静地重新启动并向应用程序上的所有用户显示一条好消息出了点问题,稍等片刻,它会自行解决。
如果应用程序不是 运行,最好能将其重定向到显示 "The app isn't running, get in touch to let me know" 或类似内容的地方。
我可以使用 process.on('uncaughtException') ... - 但这样做正确吗?
非常感谢您花时间阅读本文,感谢您对此事的帮助和想法。
您无法在崩溃后真正恢复,至少没有专门为此目的编写的代码,例如定义状态和所有内容。
否则使用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
});
When it forks, how does it affect the users - do they experience any latency while it's switching?
集群通常用于始终保持 运行 多个节点应用程序副本,这样当其中一个工作人员重生时,其他工作人员仍然处于活动状态并防止任何延迟。
if (cluster.isMaster)
require('os').cpus().forEach(cluster.fork);
cluster.on('exit', cluster.fork);
Is there anything that I should look out for, e.g. say there was an error connecting to the database and I hadn't put in a handler to deal with that, so the app kept on crashing - would it just keep trying to fork and hog all the system resources?
我以前其实没有想过这个问题。听起来不错。
通常错误是由用户引起的,因此预计不会导致此类问题。
也许数据库未连接问题,以及其他此类 不可恢复的 错误应该在 代码实际进入创建分叉之前处理。
mongoose.connection.on('open', function() {
// create forks here
});
mongoose.connection.on('error', function() {
// don't start the app if database isn't working..
});
或者也许应该识别此类错误并且不应创建分叉。但是您可能必须事先知道可能是哪些错误,以便您可以处理它们。