我會嘗試儘可能清楚我的問題。如果存在斷開連接,MSSQL會提取連接
我使用這個特定的版本:https://github.com/patriksimek/node-mssql/tree/v3.3.0#multiple-connections mssql npm包。
我一直在尋找通過繁瑣的(潛在的LIB)和微軟文檔的單證(見上面的鏈接GitHub的)
我無法找到任何東西,做一些簡單的像getCurrentConnection,或getConnectionStatus或任何類似。
我有兩種方法來解決這個問題,但我不滿意他們兩個,所以這就是爲什麼我在這裏問。
我的第一種方法是設置一個超時並讓connect函數在每個catch(err)上調用它自己。
第二個是在中間件中處理這個問題,但如果所有工作都正常,它將在每個請求上連接到SQL並再次關閉該連接。
我的中間件功能:
api.use(function(err, req, res, next){
sql.close();
sql.connect(config.database).then(() => {
next();
}).catch(function(err) {
sql.close();
server.main();
});
});
PS所以要清楚,我想,如果可能的話拿起連接,而不是結束,並開始與問候一個新來當服務器或數據庫崩潰,我仍然有一些來自興奮功能的數據。
希望我清楚了。
嗨阿諾德,感謝您的快速回復,這個事情你描述所有去了解你的關係。但在我的問題中,我指定有時我們的api在db之前啓動。你會怎麼做?我指定的方式,但不是在中間件功能?因此,不斷重試catch(err)還是沒有超時更清晰的方式? – Knopfler
如果我使用這段代碼: '代碼' function getConnection(){ sql.close(); ()();> sql.connect(config.database).then(()=> { sql.close(); main(); console.log('werkt wel'); })。catch(function(err) ()=> { getConnection(),2000 }) });}};}}; } 'code' 而且我用docker打開sql server啓動超時功能就會停止。一旦我重新啓動節點進程,它就會工作,但我不想這樣做。 – Knopfler
對不起,對於遲到的回覆,但國際海事組織你有兩個選擇來解決這個賽車條件(數據庫沒有準備好,當應用程序啓動):1)未能啓動應用程序。這就是我通常所做的。然後我在啓動腳本中處理這個問題。在我的情況下,如果數據庫沒有準備好,根本就沒有必要啓動應用程序(!)。 2)讓應用繼續輪詢數據庫並繼續直到數據庫準備就緒。這也沒關係,但是如果數據庫永遠不會準備好,那麼在某個時候這需要失敗。它看起來就是你在下面做的。 – arnold