我正在使用 mysql library对于 node.js 应用程序。一般来说,我是 MySQL 的新手,但我已经能够成功运行单个查询并将数据返回到我的网络客户端。问题是它似乎只运行一次(在抛出错误之前)。这是在我的服务器上运行的代码:
//connect to MySQL server
connection.connect(function(err) {
if (err) {
console.error('error connecting: ' + err.stack);
return;
}
console.log('connected as id ' + connection.threadId);
});
//do MySQL query
connection.query('SELECT * FROM `mydatabase` WHERE `tag` = \"' + data.AppID + '\" AND `time` BETWEEN \"' + t_from.toISOString() + '\" AND \"' + t_to.toISOString() + '\" ORDER BY ID DESC', function (error, results, fields) {
//return the results to webclient here.
});
//close the connection
connection.end();
所以,基本上每次我单击一个按钮时,它都会向服务器发送一个请求(使用 socket.io)并运行查询。它首先创建连接,运行查询(并将数据返回给 webclient),然后关闭连接。这在我第一次单击该按钮时有效,但任何后续单击都不会返回任何内容。我的理解是每次运行查询时我都需要打开和关闭连接(而不是让它保持打开状态)...但是有人可以告诉我我做错了什么吗?
最佳答案
根据 Kevin 和 Elmigranto 的建议...我改为使用连接池。以下是我的设置方式:
//setup MySQL connection parameters
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'somehost.com',
user : 'user',
password : 'password'
});
然后,在我用来进行查询的函数中,我使用了这个:
//do MySQL query
pool.getConnection(function(err, connection) {
// Use the connection
connection.query('SELECT * FROM `mydatabase` WHERE `tag` = \"' + data.AppID + '\" AND `time` BETWEEN \"' + t_from.toISOString() + '\" AND \"' + t_to.toISOString() + '\" ORDER BY ID DESC', function (error, results, fields) {
//return the results to the webclient here
connection.release();
});
});
希望对寻找相同答案的人有所帮助。
关于mysql - 在 Nodejs MySQL 中运行多个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29131610/