2014-12-07 63 views
1

我有一箇中間件功能,它可以有效地傳遞,但用於記錄響應狀態代碼,開始時間,結束時間等等。在某些時候,這段代碼停止工作,可能在升級後以快速4.Express Res標頭事件不再觸發

module.exports = function() { 
    var app = express(); 

    app.use(function (req, res, next) { 
    res.on('header', function() { 
     // Here I could inspect res.headers, res.statusCode, etc. 
     // This 'header' event seems to no longer be fired. 
    } 

    next(); 
    }); 

    return app; 
} 

我也嘗試過使用express.Router()代替express(),但在行爲上沒有區別。

此功能消失了嗎?有沒有其他解決方案獲得響應頭其他一些中間件已發送響應,但之前響應正文結束?

回答

2

header事件由Connect中間件觸發。

從ExpressJS維基

Express 4的報價不再有連接的依賴。這意味着所有 捆綁的中間件(靜態除外)不再可用於 express模塊​​。每個中間件都可以作爲一個模塊使用。 (更多關於此 下面。)

這一改變使中間件接收修復,更新和發佈, 不影響快速發佈週期(反之亦然)。

來源:https://github.com/strongloop/express/wiki/Migrating-from-3.x-to-4.x

+1

謝謝@Sobiaholic。事實證明,此事件也從Connect中刪除。有一種使用頻率很高的鴨嘴,似乎作爲一種替代方式進行了充分測試:https://www.npmjs.org/package/on-headers – Brad 2014-12-07 22:01:04

1

事實證明,在header事件的響應對象被解僱了連接。此事件在Connect 2.x中已棄用,並從Connect 3.x中刪除。從Connect 2.x source code

res.on = function(type, listener){ 
    if (type === 'header') { 
     deprecate('res.on("header"): use on-headers npm module instead'); 
     onHeaders(this, listener); 
     return this; 
    } 

    return addListener.apply(this, arguments); 
    }; 

建議的模塊:https://www.npmjs.org/package/on-headers