Express res标题事件不再触发

时间:2014-12-07 21:22:05

标签: node.js express

我有一个有效传递的中间件功能,但用于记录响应状态代码,开始时间,结束时间等。在某些时候,此代码可能在升级到Express 4后停止工作。

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 个答案:

答案 0 :(得分:3)

事实证明,响应对象上的header事件已启动Connect。此事件在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

答案 1 :(得分:2)

header中间件触发了

Connect事件。

从ExpressJS Wiki引用

  

Express 4不再将Connect作为依赖项。这意味着ALL   捆绑的中间件(静态除外)已不再可用   快递模块。每个中间件都可用作模块。 (更多关于   在下面。)

     

此更改允许中间件接收修复,更新和发布,   不影响Express发布周期(反之亦然)。

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