node.js - 在nodejs中在哪里初始化一个新的数据库连接?

标签 node.js database express

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

如果我错了请纠正我,但我猜第一种方法更好,因为它可以重用相同的连接。但是,我见过为每个路由处理程序创建一个的其他示例。

推荐的方法是什么?还是因为数据库如何在其端缓存连接而重要?

编辑:我可能对数据库驱动程序的连接方式感到困惑。大多数提供诸如 connectDB(config) 之类的方法,您可以在其中指定资源的位置、身份验证等。这实际上是在建立连接还是在您实际向该数据库请求某些内容时启动连接对象?

最佳答案

您应该建立一次连接并在所有处理程序中使用它。

如果您在每次请求时都重新连接到数据库,那么您将使用大量资源并增加延迟,更不用说无用的重新连接会破坏您的数据库。

数据库连接应该是持久的——而不是一次性的。

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

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

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

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

有关详细信息,请参阅:

另请参阅此答案以获取更多信息:

关于node.js - 在nodejs中在哪里初始化一个新的数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41324442/

相关文章:

node.js - 如何将一个模板的一些数据发送到另一个模板 Meteor

javascript - 访问调用模块中定义的所需模块中的函数

php - 我的数据未在数据库中获取

c# - 如何在 C# 中将数据库对象转换为 int?

node.js - Node mysql TypeError : conn. beginTransaction 不是一个函数

node.js - 有没有办法将nodejs连接到本地Google数据存储

java - 是否多线程任务?

javascript - Express 出现错误 : Can't set headers after they are sent

node.js - 将 JSON 对象从 Express 服务器发送到 React 时 undefined object ?

javascript - Node.js Express Jade 改进 TTFB?