在node.js http响应结束时运行清理代码

时间:2012-06-14 13:08:47

标签: node.js express

  @app = express.createServer()
  @app.use express.bodyParser()

在HTTP请求/响应结束时,我想执行一个操作(关闭数据库连接)。这最好是在响应到达客户端之后发生,因此客户端不等待它,但如果它发生在内联,我总是可以进行process.nextTick

如何在回复结束时注册回调?

2 个答案:

答案 0 :(得分:7)

HTTP响应是WritableStream。当流关闭时,会发出一个完成事件。因此,倾听它就可以解决问题:

res.on('finish', function() {
    console.log(res._headers);
});

更灵活。可以放在中间件或资源处理程序中。

答案 1 :(得分:2)

所以你想用每个请求打开/关闭/打开/关闭与数据库的连接?保持开放并重新使用连接要好得多。

如果您确实想在将响应发送回客户端(对于所有路由)之后执行某些操作,则可以创建一个覆盖res.end()函数的中间件(这是最后一个调用的函数,如:< / p>

@app.use (req, res, next) ->
  var oldEnd = res.end;
  res.end = ->
    oldEnd.apply(res, arguments)
    # do stuff after sending the response back to the client