2012-09-02 41 views
4

我正在嘗試創建一個記錄響應時間和狀態代碼並將其發送到數據庫的中間件。但是,我不確定要使用哪個事件。在節點的文檔中有一個close事件,但它永遠不會被解僱。 end也不起作用。但是,header確實存在,但我找不到任何文檔。Node.js/Express響應事件

app.use(function(req, res, next) { 
    res.on('close', function() { 
    console.log('close') 
    }) 

    res.on('end', function() { 
    console.log('end') 
    }) 

    res.on('header', function() { 
    console.log('header') 
    console.log(res.statusCode) 
    }) 

    next() 
}) 

只有header火災,它也返回正確的res.statusCode。

我的問題:

  1. 爲什麼不是close射擊?爲什麼header開火?
  2. 這是一個可靠的方法嗎?
+0

什麼版本的節點? HTTP或HTTPS? [這個問題](http://stackoverflow.com/questions/6537510/node-js-https-no-response-end-event-close-instead?rq=1)暗示該計劃有所作爲。它也可能僅僅是Node中的一個bug /迴歸。另外:https://github.com/joyent/node/issues/1611 ......同樣,它顯示[改變w/r/t這是在工作中。](https://github.com/joyent/節點/問題/ 3855) –

+0

http。節點v 0.8.8。怪異的'結束'或'關閉'如何工作。你認爲我可以用'finish'沒有任何問題嗎? –

回答

3

close僅在連接在調用response.end()之前終止連接時觸發事件。 headerconnect發起的事件。這不是node.js http.ServerResponse本地事件。

看看connectresponseTime中間件。我認爲它應該可以幫助你。

更新

這裏是header事件文檔https://github.com/senchalabs/connect/blob/gh-pages/tests.md#patch

heder從writeHead方法燒製由connecthttps://github.com/senchalabs/connect/blob/master/lib/patch.js

+0

是的,這是我瞭解'header'的地方,但我找不到任何有關它的文檔。 –

+0

檢查答案更新 –

2

代理有一個finish event,當響應已經發送它被髮射。

app.use(function(req, res,next){ 
    res.on('finish', function(){ 
     console.log('the response has been sent'); 
    }); 
    next(); 
});