在节点js退出之前清理

时间:2016-11-14 10:12:23

标签: javascript node.js

如果要运行不同模块的多个清理功能,当nodejs退出时如何进行适当的清理?

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

你可以做的是在你的模块中添加一个断开功能,在完成后回调,当你收到所有回调时,你可以退出这个过程。 所以,让我们说,

你有3个模块db1.js,db2.js和socketConnection.js,所以你可以有一个返回回调的close方法,例如:

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

并在您处理exit的主js文件中,导入所有3个模块并为所有连接调用close方法,然后退出该进程。例如:

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

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