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