1
我正在構建Node Web應用程序(使用Express)並儘可能使所有內容儘可能幹,我會自動獲取每個請求的數據庫連接,但我也需要釋放它(回到池)。捕獲HTTP響應事件
我可以在每條路徑上手動執行該操作,但這隻會污染代碼。我想我應該聽服務器事件並在響應完成生成或發送後釋放它。我有什麼選擇?當響應完成什麼事件(和其對象(應用程序,請求或其他)內被觸發?
我正在構建Node Web應用程序(使用Express)並儘可能使所有內容儘可能幹,我會自動獲取每個請求的數據庫連接,但我也需要釋放它(回到池)。捕獲HTTP響應事件
我可以在每條路徑上手動執行該操作,但這隻會污染代碼。我想我應該聽服務器事件並在響應完成生成或發送後釋放它。我有什麼選擇?當響應完成什麼事件(和其對象(應用程序,請求或其他)內被觸發?
res
從EventEmitter繼承,並且可以使用默認的事件,以及你可以發出自己的。
這麼一個最常見的是finish
(在node.0.8.12及以上end
)事件:
res.on('finish', function() {
// request processing finished
});
,如果你願意,你可以附上事件的所有請求,或在特定的根源早
另外,您可以創建中間件,這將獲得數據庫連接,並附加finish
事件並可能超時。然後你需要的只是將這個中間件添加到路由中,所以最少需要重複編碼。
同時,我建議您不要爲每個請求創建數據庫連接,因爲這是一個很大的開銷和不必要的套接字以及IO處理程序的使用。您可以自由使用單一連接,從性能的角度來看,效率會更高。
+1表示可能不需要爲每個請求創建數據庫連接。這與其他服務器環境有所不同,主要是因爲Node.js使用單個線程。 –
單線程+您可以簡單地訪問請求範圍之外的變量和內容。你可以有一些甚至共享的數據,或類似的東西。雖然例如在PHP中,每個線程 - 完全相互隔離 - sux。 – moka
非常酷,不知道這個事件存在 – Plato