2016-11-14 96 views
2

如何在nodejs退出時執行適當的清理,何時需要運行不同模塊的多個清理功能?在節點js退出前清理

我想關閉2個不同的數據庫連接,1個應用程序退出時的websocket連接,所有這些連接都在不同的模塊中。

如果我添加以下代碼段中的所有模塊

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

那麼只有第一個模塊打印日誌和進程退出。

如果我不添加process.exit(1);,然後按Ctrl + C打印所有的日誌,但進程不會退出。

+0

您是否嘗試過'process.beforeExit(...)'事件作爲替代方法? –

回答

0

你可以做的是在你的模塊中添加一個斷開連接功能,當你收到所有的回調,你可以退出這個過程時,這個功能會在完成時給回調。 因此,可以說,

你有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); 
       }); 
     }); 
    }); 
}); 

這將確保所有關閉功能已完成執行並安全退出您的過程。