响应事件上的Node.js / Express

我正在尝试创build一个logging响应时间和状态代码并将其发送到数据库的中间件。 但是,我不确定要使用什么事件。 在节点的文档中有一个close事件,但它从来没有被解雇。 end也不起作用。 但是, header ,但我找不到任何文件。

 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. 这是一个可靠的方法去?

只有在response.end()被调用之前连接被终止的情况下才close事件。 由connect触发的header事件。 这不是node.js http.ServerResponse本地事件。

看看connect responseTime中间件。 我认为它应该可以帮助你。

更新

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

heder从writeHead方法代理通过connect https://github.com/senchalabs/connect/blob/master/lib/patch.js

有一个结束事件 ,当响应被发送时它被发射。

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