在nodejs中初始化新的数据库连接的位置?
应该在路由处理程序的范围之外创build数据库连接的实例,还是为每个处理程序创build一个(例如, app.get('/todos')
)?
纠正我,如果我错了,但我想第一种方法更好,因为它可以重用相同的连接。 不过,我已经看到了其他的例子,为每个路由处理程序创build一个。
什么是推荐的方法? 还是由于数据库如何caching连接到底如何?
编辑:我可能会困惑如何数据库驱动程序连接。 大多数提供了一个方法,如connectDB(config)
在哪里指定资源的位置,身份validation等。这实际上是build立一个连接,或者当您实际上请求与该数据库对象的东西时,它启动连接?
你应该build立连接一次,并在所有的处理程序中使用它。
如果您在每个请求中重新连接到数据库,那么您将使用大量资源并增加延迟,更不用说用无用的重新连接来敲击数据库了。
数据库连接的意图是持久的 – 不是一次性的事情。
你没有说你使用的是哪个数据库,但是在Mongo的例子中 – 当你用本地的MongoDB Node.js Driver连接到数据库时,你可以使用一些选项,比如:
-
poolSize
– 为每个单独的服务器或代理连接设置最大poolSize(默认值为5
) -
autoReconnect
– 错误时重新连接(默认为true
)
其他一些有趣的选项是: reconnectTries
, reconnectInterval
, keepAlive
, connectTimeoutMS
, socketTimeoutMS
。
如果您对默认值不满意,则可以更改这些选项的值,但这些选项可用于pipe理长时间连接,而不是在每个请求上重新连接和断开连接。
更多信息请参阅:
- 连接失败和重试
- MongoClient或如何以一种新的更好的方式进行连接
- 教程/连接到MongoDB
- 参考/连接选项/连接设置
- 关于node.js的问题mongo驱动程序自动重新连接 (邮件列表)
有关更多信息,另请参阅此答案:
- 在Express路由器中使用mongoDB