在节点js退出前清理
问题描述:
如何在nodejs退出时执行适当的清理,何时需要运行不同模块的多个清理功能?在节点js退出前清理
我想关闭2个不同的数据库连接,1个应用程序退出时的websocket连接,所有这些连接都在不同的模块中。
如果我添加以下代码段中的所有模块
process.on('SIGTERM', function() {
console.log('SIGTERM fired');
process.exit(1);
});
那么只有第一个模块打印日志和进程退出。
如果我不添加process.exit(1);
,然后按Ctrl + C打印所有的日志,但进程不会退出。
答
你可以做的是在你的模块中添加一个断开连接功能,当你收到所有的回调,你可以退出这个过程时,这个功能会在完成时给回调。 因此,可以说,
你有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);
});
});
});
});
这将确保所有关闭功能已完成执行并安全退出您的过程。
您是否尝试过'process.beforeExit(...)'事件作为替代方法? –