2013-07-25 127 views
1

我正在构建Node Web应用程序(使用Express)并尽可能使所有内容尽可能干,我会自动获取每个请求的数据库连接,但我也需要释放它(回到池)。捕获HTTP响应事件

我可以在每条路径上手动执行该操作,但这只会污染代码。我想我应该听服务器事件并在响应完成生成或发送后释放它。我有什么选择?当响应完成什么事件(和其对象(应用程序,请求或其他)内被触发?

回答

4

res从EventEmitter继承,并且可以使用默认的事件,以及你可以发出自己的。
这么一个最常见的是finish(在node.0.8.12及以上end)事件:

res.on('finish', function() { 
    // request processing finished 
}); 

,如果你愿意,你可以附上事件的所有请求,或在特定的根源早
另外,您可以创建中间件,这将获得数据库连接,并附加finish事件并可能超时。然后你需要的只是将这个中间件添加到路由中,所以最少需要重复编码。

同时,我建议您不要为每个请求创建数据库连接,因为这是一个很大的开销和不必要的套接字以及IO处理程序的使用。您可以自由使用单一连接,从性能的角度来看,效率会更高。

+0

+1表示可能不需要为每个请求创建数据库连接。这与其他服务器环境有所不同,主要是因为Node.js使用单个线程。 –

+0

单线程+您可以简单地访问请求范围之外的变量和内容。你可以有一些甚至共享的数据,或类似的东西。虽然例如在PHP中,每个线程 - 完全相互隔离 - sux。 – moka

+0

非常酷,不知道这个事件存在 – Plato