关于 connection.end() 如何在 node.js mySQL 模块中工作的困惑
Posted
技术标签:
【中文标题】关于 connection.end() 如何在 node.js mySQL 模块中工作的困惑【英文标题】:confusion about how connection.end() works in node.js mySQL module 【发布时间】:2018-12-04 16:54:24 【问题描述】:const mysql = require('mysql');
let connection = mysql.createConnection(...);
connection.connect((err)=>
...
connection.query((err)=>
...
connection.end(););
);
使用关闭连接后
connection.end()
,如果我想使用相同的凭据再次查询数据库,是否需要通过调用建立新连接
mysql.createConnection(...)
或者我可以通过调用来重复使用相同的连接
connection.connect(...)
一点背景知识:我正在将一个 angular/node.js 应用程序部署到一个共享托管网站,并且该网络主机对 mySQL 数据库的最大并发连接数限制为 25 个,因此我需要确保我关闭了一个连接在用户进行查询后正确。我不确定是否可以在关闭该连接后重用由 mysql.createConnection(...) 创建的连接,还是需要创建一个全新的连接。
【问题讨论】:
你会想要一个游泳池。将其配置为不使用超过 25 个连接。 【参考方案1】:您可以使用一个全局连接从 db 获取数据。
如果你在单个文件上工作,那么你可以写成
app.js 只有一个文件
var mysql = require('mysql');
var connection = mysql.createConnection(...);
connection.query('SELECT 1', function (error, results, fields)
if (error) throw error;
// connected!
);
如果您想在多个文件中使用相同的连接,则可以编写为app.js
app.use(
connection(mysql,
host: xxxxx,
user: 'root',
password : xxxx,
port : 3306,
database:dbname
,'pool'),
);
var oem = require('./routes/type');
app.get('/api/oemtype',oem.type);
对于第二个文件 type.js
exports.type = function(req, res)
req.getConnection(function(err,connection)
var query = connection.query('SELECT * FROM type',function(err,rows)
if(err)
res.json(
status:0
);
res.send(rows);
res.render('customers',page_title:"Customers - Node.js",data:rows);
);
);
;
无需使用connection.end()。
【讨论】:
我将应用程序部署到的 Web 主机对 mySQL 数据库的最大并发连接数限制为 25 个。不调用connection.end()会不会导致连接挂起,从而导致问题达到最大极限? 如果每次都结束连接,那么mysql每次都会创建新连接,这会降低应用程序和mysql的性能。最好使用池连接。 池是否为所有用户创建一个池?例如,如果我将 connectionLimit 设置为 25(如 var pool=mysql.createPool(connectionLimit:10, host:...); 这将为每个用户创建一个 25 的连接池还是创建一个连接所有用户的 25 个池? 抱歉耽搁了,将为所有 25 个用户创建池,而不是为每个用户创建池。在查询工作完成后,您可以使用 connection.release() 而不是结束方法。检查这个***.com/questions/18496540/… 谢谢!这对我来说是新知识,我会自己做更多的研究:)以上是关于关于 connection.end() 如何在 node.js mySQL 模块中工作的困惑的主要内容,如果未能解决你的问题,请参考以下文章
关于如何解决稀疏OLS - 如何在Matlab中应用`l1`最小化(教育目的)