Node.js/Express on响应事件

Node.js/Express on响应事件,node.js,Node.js,我试图创建一个中间件,记录响应时间和状态代码,并将其发送到数据库。但是,我不确定使用什么事件。在节点的文档中有一个close事件,但它从未被触发结束也不起作用。然而,header有,但我找不到任何文档 app.use(function(req, res, next) { res.on('close', function() { console.log('close') }) res.on('end', function() { console.log('end')

我试图创建一个中间件,记录响应时间和状态代码,并将其发送到数据库。但是,我不确定使用什么事件。在节点的文档中有一个
close
事件,但它从未被触发<代码>结束也不起作用。然而,
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()
})
只有
标题
激发,并且它确实返回正确的res.statusCode

我的问题是:

  • 为什么
    没有关闭
    点火?为什么
    header
    正在点火
  • 这样做可靠吗

  • close
    仅当在调用response.end()之前终止连接时才会发出事件。
    标题
    由触发的事件。这不是node.js http.ServerResponse本机事件

    查看
    connect
    中间件。我想这应该对你有帮助

    更新

    下面是
    标题
    事件文档

    heder
    从由
    connect

    代理的writeHead方法激发,当响应发送时发出

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

    Node的哪个版本?HTTP,还是HTTPS?暗示这项计划会有所不同。它也可能只是节点中的错误/回归。另外:…而且,它显示为http。节点V0.8.8。奇怪的是
    结束
    关闭
    都不起作用。你认为我可以使用
    finish
    而不出现任何问题吗?是的,这是我了解
    标题的地方,但我找不到任何关于它的文档。注意:这并不意味着客户已经收到任何东西。此事件是否可以访问
    req
    res
    对象?@pir您可以从外部函数访问req和res。如果在
    finish
    事件的嵌套处理程序函数中再次引用它们,它们仍然有效。