在nodejs中初始化新的数据库连接的位置?

应该在路由处理程序的范围之外创build数据库连接的实例,还是为每个处理程序创build一个(例如, app.get('/todos') )?

纠正我,如果我错了,但我想第一种方法更好,因为它可以重用相同的连接。 不过,我已经看到了其他的例子,为每个路由处理程序创build一个。

什么是推荐的方法? 还是由于数据库如何caching连接到底如何?

编辑:我可能会困惑如何数据库驱动程序连接。 大多数提供了一个方法,如connectDB(config)在哪里指定资源的位置,身份validation等。这实际上是build立一个连接,或者当您实际上请求与该数据库对象的东西时,它启动连接?

你应该build立连接一次,并在所有的处理程序中使用它。

如果您在每个请求中重新连接到数据库,那么您将使用大量资源并增加延迟,更不用说用无用的重新连接来敲击数据库了。

数据库连接的意图是持久的 – 不是一次性的事情。

你没有说你使用的是哪个数据库,但是在Mongo的例子中 – 当你用本地的MongoDB Node.js Driver连接到数据库时,你可以使用一些选项,比如:

  • poolSize – 为每个单独的服务器或代理连接设置最大poolSize(默认值为5
  • autoReconnect – 错误时重新连接(默认为true

其他一些有趣的选项是: reconnectTriesreconnectIntervalkeepAliveconnectTimeoutMSsocketTimeoutMS

如果您对默认值不满意,则可以更改这些选项的值,但这些选项可用于pipe理长时间连接,而不是在每个请求上重新连接和断开连接。

更多信息请参阅:

  • 连接失败和重试
  • MongoClient或如何以一种新的更好的方式进行连接
  • 教程/连接到MongoDB
  • 参考/连接选项/连接设置
  • 关于node.js的问题mongo驱动程序自动重新连接 (邮件列表)

有关更多信息,另请参阅此答案:

  • 在Express路由器中使用mongoDB