在节点js退出之前进行清理
当nodejs退出时,如何从不同的模块中运行多个清理function?
我想closures2个不同的数据库连接,1个websocket连接应用程序的退出,所有这些连接在不同的模块。
如果我在所有模块中添加下面的代码片段
process.on('SIGTERM', function () { console.log('SIGTERM fired'); process.exit(1); });
然后只有第一个模块打印日志和进程退出。
如果我不加process.exit(1);
,然后按Ctrl + C打印所有的日志,但进程不会退出。
你可以做的是在你的模块中添加一个断开连接function,当你收到所有的callback,你可以退出这个过程,这个function会在完成时给callback。 所以可以说,
你有3个模块db1.js,db2.js和socketConnection.js,所以你可以有一个close方法返回callback,例如:
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); }); }); }); });
这将确保所有closuresfunction已完成执行并安全地退出您的过程。