您是否应该在路由处理程序范围之外创建数据库连接的实例,或者为每个处理程序创建一个实例(例如,app.get('/todos')
)?
如果我错了,请纠正我,但我猜第一种方法更好,因为它可以重复使用相同的连接。但是,我已经看到了为每个路由处理程序创建一个的其他示例。
推荐的方法是什么?或者由于数据库如何在其端缓存连接而重要?
编辑:我可能对数据库驱动程序如何连接感到困惑。大多数提供了诸如connectDB(config)
之类的方法,您可以在其中指定资源的位置,身份验证等。这实际上是在建立连接,还是在您实际请求具有该数据库对象的内容时启动连接?
答案 0 :(得分:1)
您应该建立一次连接并在所有处理程序中使用它。
如果您在每次请求时重新连接到数据库,那么您将使用大量资源并增加延迟,更不用说使用无用的重新连接来锤击数据库。
数据库连接意味着持久性 - 而非一次性事物。
您没有说出您使用的是哪个数据库,而是以Mongo为例 - 当您使用本机连接到数据库时 MongoDB Node.js Driver您可以使用一些选项,例如:
poolSize
- 为每个服务器或代理连接设置最大poolSize(默认为5
)autoReconnect
- 重新连接错误(默认为true
)其他一些有趣的选项包括:reconnectTries
,reconnectInterval
,keepAlive
,connectTimeoutMS
,socketTimeoutMS
。
如果您对默认设置不满意,可以更改这些选项的值,但这些选项可用于管理长期连接,而不是在每次请求时重新连接和断开连接。
有关详细信息,请参阅:
有关详细信息,请参阅此答案: