有没有办法在终止快速应用程序触发function?
基本上我想要一个像这样的语法:
app.on("event:terminate", dumpFunc);
所以,如果服务器由于任何原因停止,我可以将数据转储到磁盘。
有没有办法做到这一点,或者我应该坚持使用setTimeout
每隔几秒logging一次数据库中的所有内容?
喜欢:
var badIdea = setTimeout(dumpFunc, 5000); function dumpFunc(stuff){ //Do stuff badIdea = setTimeout(dumpFunc, 5000); }
我打开这方面的任何build议,但我需要在崩溃时variables的状态坚持下一个负载。 而我同意,不要崩溃可能是最好的行动方式,目前是不可避免的。
特别是我需要保护期间
- 从服务器到
node
的SIGINT
/SIGKILL
(CTRL
+C
types事件) - 用户input不符合期望值,并在查找
undefined
或NaN
属性时崩溃服务器
在理论上,我可以将整个代码包封装在一个try
/ catch
块中,以防止后者,但有时我们会得到循环条件(我知道,我知道,testing),或者其他问题,并且该过程需要终止。
如果发生停电或磁盘故障,我不希望有什么奇迹般的支持我们,但是我们需要某种优雅的终止选项,所以我全都是耳朵。
你可以在一个域中运行你的整个应用程序,这样你就可以发现错误。 它的工作方式类似于捕获未捕获的exception,并且在不重新启动进程(进程将泄露资源等)方面同样不利。
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
,这是一个无法捕捉的信号。
您可以使用以下代码:
process.on('uncaughtException', function (err) { console.log("Error packing", err); });
这将使你的应用程序不可破解。 但是,我不认为这会让你免于死亡信号。