有没有办法在终止快速应用程序触发function?

基本上我想要一个像这样的语法:

app.on("event:terminate", dumpFunc); 

所以,如果服务器由于任何原因停止,我可以将数据转储到磁盘。

有没有办法做到这一点,或者我应该坚持使用setTimeout每隔几秒logging一次数据库中的所有内容?

喜欢:

 var badIdea = setTimeout(dumpFunc, 5000); function dumpFunc(stuff){ //Do stuff badIdea = setTimeout(dumpFunc, 5000); } 

我打开这方面的任何build议,但我需要在崩溃时variables的状态坚持下一个负载。 而我同意,不要崩溃可能是最好的行动方式,目前是不可避免的。

特别是我需要保护期间

  1. 从服务器到nodeSIGINT / SIGKILLCTRL + Ctypes事件)
  2. 用户input不符合期望值,并在查找undefinedNaN属性时崩溃服务器

在理论上,我可以将整个代码包封装在一个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); }); 

这将使你的应用程序不可破解。 但是,我不认为这会让你免于死亡信号。