Javascript 有没有办法在终止时触发express应用程序中的函数?

Javascript 有没有办法在终止时触发express应用程序中的函数?,javascript,node.js,express,Javascript,Node.js,Express,基本上我想要一个语法,如: app.on("event:terminate", dumpFunc); 因此,如果服务器因任何原因停止,我可以将数据转储到磁盘 有没有办法做到这一点,或者我应该坚持每隔几秒钟用setTimeout记录数据库中的所有内容 比如: 我对这方面的任何建议都持开放态度,但我需要崩溃时变量的状态,以便在下一次加载时保持不变。虽然我同意,但“不要撞车”可能是最好的做法,目前这是不可避免的 具体来说,我需要在这两种情况下进行保护 将SIGINT/SIGKILL从服务器发送到no

基本上我想要一个语法,如:

app.on("event:terminate", dumpFunc);
因此,如果服务器因任何原因停止,我可以将数据转储到磁盘

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

比如:

我对这方面的任何建议都持开放态度,但我需要崩溃时变量的状态,以便在下一次加载时保持不变。虽然我同意,但“不要撞车”可能是最好的做法,目前这是不可避免的

具体来说,我需要在这两种情况下进行保护

  • SIGINT
    /
    SIGKILL
    从服务器发送到
    node
    CTRL
    +
    C
    类型事件)
  • 不符合预期的用户输入,当服务器查找
    未定义的属性
    NaN
  • 理论上,我可以将整个代码库包装在一个
    try
    /
    catch
    块中,以防止后者,但有时我们会遇到循环条件(我知道,我知道,测试)或其他问题,需要终止该过程


    我并不期望在停电或磁盘故障时有什么奇迹般的东西为我们提供支持,但我们需要一些优雅的终止选项,所以我洗耳恭听。

    您可以使用以下代码:

    process.on('uncaughtException', function (err) {
        console.log("Error packing", err);
    });
    

    这将使你的应用程序无法抓取。但是,我不认为这会阻止您发出终止信号。

    您可以在一个小时内运行整个应用程序,以便捕获错误。它的工作原理类似于捕获未捕获的异常,并且在不重新启动进程方面同样糟糕(进程将泄漏资源等)

    要捕获一个
    SIGINT
    ,您可以执行以下操作:

    process.on('SIGINT', function() {
      // caught an interrupt signal
    });
    

    至于
    SIGKILL
    ,这是一个无法捕捉的信号。

    谢谢!你在正确的轨道上,节点也有一个
    sigint
    事件!这本书读得很好。
    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();
    });
    
    process.on('SIGINT', function() {
      // caught an interrupt signal
    });