我正在将mysql library用于node.js应用程序。我一般都是MySQL的新手,但我已经能够成功运行单个查询并将数据返回给我的webclient。问题是它似乎只运行一次(在抛出错误之前)。这是我服务器上运行的代码:
//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),然后关闭连接。这是第一次单击按钮时,但任何后续点击都不会返回任何内容。我的理解是每次运行查询时都需要打开和关闭连接(而不是让它保持打开状态)......但有人可以告诉我我做错了吗?
答案 0 :(得分:1)
Per 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();
});
});
希望能帮助任何人寻找相同的答案。