2012-06-14 63 views
2
@app = express.createServer() 
    @app.use express.bodyParser() 

在HTTP請求/響應的末尾,我想執行一個操作(關閉數據庫連接)。這最好在響應到達客戶端的途中發生,以便客戶端不在等待,但如果它發生在線,我總是可以做一個process.nextTick在node.js末尾運行清理代碼http響應

如何爲響應的結尾註冊回調?

回答

2

那麼你想打開/關閉/打開/關閉每個請求的數據庫連接?保持開放並重新使用連接要好得多。

如果你想這樣做,你只發送後的響應返回給客戶端(所有路由),你可以使覆蓋res.end()功能(這是最後一個叫,像這樣的中間件東西:

@app.use (req, res, next) -> 
    var oldEnd = res.end; 
    res.end = -> 
    oldEnd.apply(res, arguments) 
    # do stuff after sending the response back to the client 
+1

我每個請求都有一個連接,因爲連接不能同時用於兩個不同的查詢。如果應用程序執行不力,我可能會引入連接池。在這種情況下,我也可以使用您的解決方案將連接返回到池。謝謝。 –

6

的HTTP響應是WritableStream當流關閉,一個完成事件發出這樣聽着它的伎倆:。

res.on('finish', function() { 
    console.log(res._headers); 
}); 

更加靈活可置於中間件或資源處理程序。