在Nodejs MySQL中运行多个查询

时间:2015-03-18 20:01:57

标签: mysql node.js

我正在将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),然后关闭连接。这是第一次单击按钮时,但任何后续点击都不会返回任何内容。我的理解是每次运行查询时都需要打开和关闭连接(而不是让它保持打开状态)......但有人可以告诉我我做错了吗?

1 个答案:

答案 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();
  });
});

希望能帮助任何人寻找相同的答案。