我正在构建一个Node Web应用程序(使用Express)并尽可能保持DRY,我会自动为每个请求获取数据库连接,但我还需要将其释放(返回池中)。
我可以在每条路线中手动完成,但这只会污染代码。我想我应该监听服务器事件并在响应完成生成或发送后释放它。我有什么选择?什么事件(以及在响应完成时触发哪个对象(app,request或者其他)?
答案 0 :(得分:4)
res
继承自EventEmitter,可以使用默认事件,也可以发出自己的事件。
因此,最常见的一个是finish
(在node.0.8.12和更早的end
中)事件:
res.on('finish', function() {
// request processing finished
});
如果您愿意,您可以为所有请求附加该事件,或者在其根源的早期附加特定事件
此外,您可以创建中间件,这将获得数据库连接,并附加finish
事件和可能的超时。然后你需要的只是将中间件添加到路由中,因此最少重复编码。
与此同时,我建议您不要为每个请求创建数据库连接,因为这是一个很大的开销,不必要地使用套接字和IO处理程序。您可以自由使用单一连接,从性能的角度来看,它会非常有效。