您应该在路由处理程序范围之外创建一个数据库连接实例,还是为每个处理程序创建一个实例(例如,app.get('/todos')
)?
如果我错了请纠正我,但我猜第一种方法更好,因为它可以重用相同的连接。但是,我见过为每个路由处理程序创建一个的其他示例。
推荐的方法是什么?还是因为数据库如何在其端缓存连接而重要?
编辑:我可能对数据库驱动程序的连接方式感到困惑。大多数提供诸如 connectDB(config)
之类的方法,您可以在其中指定资源的位置、身份验证等。这实际上是在建立连接还是在您实际向该数据库请求某些内容时启动连接对象?
最佳答案
您应该建立一次连接并在所有处理程序中使用它。
如果您在每次请求时都重新连接到数据库,那么您将使用大量资源并增加延迟,更不用说无用的重新连接会破坏您的数据库。
数据库连接应该是持久的——而不是一次性的。
你没有说你使用的是哪个数据库,但是在 Mongo 的例子中 - 当你使用 native 连接到数据库时 MongoDB Node.js Driver您可以使用一些选项,例如:
poolSize
- 为每个单独的服务器或代理连接设置最大 poolSize(默认为5
)autoReconnect
- 出错时重新连接(默认为true
)
其他一些有趣的选项是:reconnectTries
、reconnectInterval
、keepAlive
、connectTimeoutMS
、socketTimeoutMS
.
如果您对默认值不满意,您可以更改这些选项的值,但这些选项用于管理长期连接,而不是在每次请求时重新连接和断开连接。
有关详细信息,请参阅:
- Connection Failures and Retries
- MongoClient or how to connect in a new and better way
- Tutorials / Connect to MongoDB
- Reference / Connection Options / Connection Settings
- Question about node.js mongo driver auto-reconnect (邮件列表)
另请参阅此答案以获取更多信息:
关于node.js - 在nodejs中在哪里初始化一个新的数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41324442/