基本上我想要这样的语法:
app.on("event:terminate", dumpFunc);
这样,如果服务器由于某种原因停止了,我可以将数据转储到磁盘。
有没有办法做到这一点,还是我应该坚持每隔几秒钟用a记录数据库中的所有内容setTimeout
?
喜欢:
var badIdea = setTimeout(dumpFunc, 5000);
function dumpFunc(stuff){
//Do stuff
badIdea = setTimeout(dumpFunc, 5000);
}
我愿意就此提出任何建议,但我需要崩溃时变量的状态才能在下次加载时持续存在。尽管我同意,但不要崩溃可能是最好的做法,但目前尚无法避免。
特别是在这两种情况下,我都需要保护
SIGINT
/SIGKILL
到node
(CTRL
+C
类型事件)undefined
或属性时使服务器崩溃NaN
从理论上讲,我可以将整个代码库包装在try
/catch
块中以防止后者,但有时我们会遇到循环条件(我知道,我知道,测试)或其他问题,因此需要终止该过程。
在电源中断或磁盘故障的情况下,我不希望有什么奇迹般地支持我们,但是我们需要某种优美的终止选项,所以我无所不能。
您可以在Domain中运行整个应用程序,从而可以捕获错误。它的工作方式类似于捕获未捕获的异常,并且在不重新启动进程方面同样很糟糕(进程将泄漏资源等)。
var domain = require('domain');
var d = domain.create();
d.on('error', function(err) {
// log the error, store it, etc
});
d.run(function() {
var express = require('express');
var app = express();
// application code here
app.listen();
});
要捕获SIGINT
,您可以执行以下操作:
process.on('SIGINT', function() {
// caught an interrupt signal
});
至于SIGKILL
,这是一个无法捕捉的信号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句