【问题标题】:When am I supposed to start and end my node.js SQL connection and should I just use pooling from the get go?我应该什么时候开始和结束我的 node.js SQL 连接,我应该从一开始就使用池化吗?
【发布时间】:2019-10-21 01:58:41
【问题描述】:

我正在启动我的第一个 Express 网络应用程序。我不太了解何时/何地开始我的 SQL 连接以及我应该何时结束它的逻辑。

在线复制粘贴项目以开始使用,我在同一个 db.js 文件中进行了连接和关闭。似乎无论在哪里需要,它都会立即建立联系。无论是在 APP.JS 入口点中,还是只是某个模型文件需要它。

因此删除 connection.end() 方法解决了我无法插入查询的问题,因为“调用退出后无法将查询入队”。但是如果我在函数插入之后手动连接并结束,我需要创建一个新的数据库对象,否则 connect() 将无法工作。

我真的应该在哪里“开始”连接。来自 app.js 中的需求?因为它从任何地方的任何需求开始,它甚至有关系吗?何时键入 connection.end() 命令?它不像桌面应用程序,因此在 VS Code 上终止节点服务器无论如何都会结束它。

我只是不明白,Node.js 文档并没有真正为我解释清楚。我应该使用池化吗?我在哪里关闭连接?为什么选择一种方式?我真的试着用谷歌搜索它,但没有任何关于为什么和在哪里约定的问题。

【问题讨论】:

    标签: javascript express node-mysql


    【解决方案1】:

    一般来说,数据库连接应该在查询执行之前创建并在之后立即关闭。

    长期存在的数据库连接会耗尽服务器的资源,并可能导致连接限制耗尽(客户端驱动程序通常会设置一个上限)。您在应用程序中的并发使用越多,您就越容易出现长期连接导致问题。

    从头开始创建连接是一个耗费资源和耗时的过程。因此,您绝对应该使用连接池,这使得“创建”连接成为一种快速操作,只需从池中获取可用连接。

    通过尽快将连接释放回池,您可以将其释放以供其他工作人员使用。

    https://softwareengineering.stackexchange.com/a/142068/167591

    【讨论】:

    • 井池似乎是要走的路,因为如果我使用 connection.end() 标记,那么我每次都必须创建一个新的连接对象。从我收集的信息来看,总会有一个根据需要运行的连接池。这对我来说似乎很奇怪,因为我的 require 函数是启动连接的函数,因为 node 中的 require 运行脚本。所以基本上我不需要使用连接函数命令来启动它。从设计的角度来看,这也是令人费解的地方,考虑到教程明确显示了这些命令。
    猜你喜欢
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 2011-05-16
    相关资源
    最近更新 更多