在节点js退出前清理

问题描述:

如何在nodejs退出时执行适当的清理,何时需要运行不同模块的多个清理功能?在节点js退出前清理

我想关闭2个不同的数据库连接,1个应用程序退出时的websocket连接,所有这些连接都在不同的模块中。

如果我添加以下代码段中的所有模块

process.on('SIGTERM', function() { 
    console.log('SIGTERM fired'); 
    process.exit(1); 
}); 

那么只有第一个模块打印日志和进程退出。

如果我不添加process.exit(1);,然后按Ctrl + C打印所有的日志,但进程不会退出。

+0

您是否尝试过'process.beforeExit(...)'事件作为替代方法? –

你可以做的是在你的模块中添加一个断开连接功能,当你收到所有的回调,你可以退出这个过程时,这个功能会在完成时给回调。 因此,可以说,

你有3个模块db1.js,db2.js和socketConnection.js,这样你就可以有一个返回回调如关闭方法:

db1.close=function(callback){ 
    db.close(); 
    callback(); 
} 

,并在主JS文件你在哪里处理退出,导入所有3个模块并调用所有连接的close方法,然后退出该过程。例如:

process.on('SIGTERM', function() { 
    db1.close(function(){ 
     db2.close(function(){ 
       socketConnection.close(function(){ 
         process.exit(1); 
       }); 
     }); 
    }); 
}); 

这将确保所有关闭功能已完成执行并安全退出您的过程。