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

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

如何在响应结束时注册回调?

4

2 回答 2

7

HTTP 响应是一个可写流。当流关闭时,会发出完成事件。因此,听它就可以了:

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

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

于 2014-08-25T13:58:50.327 回答
1

所以你想在每个请求中打开/关闭/打开/关闭与数据库的连接?保持它打开并重用连接会更好。

如果您确实想在将响应发送回客户端(对于所有路由)之后做某事,您可以制作一个覆盖该res.end()函数的中间件(这是最后一个调用的,如下所示:

@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
于 2012-06-14T14:31:08.410 回答