在节点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已完成执行并安全地退出您的过程。