mysql - 在 Nodejs MySQL 中运行多个查询

标签 mysql node.js

我正在使用 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/

相关文章:

mysql - 多表SQL查询(涉及外键)

mysql - 大型SQL动态查询使系统崩溃

sql - 如何更改SQL插入语句的目标表?

javascript - 可以在 webpack.config.js 中链接 Node 模块文件吗?

node.js - 使用哪个 Vagrant Ubuntu 盒子来安装最新的 Node.js?

javascript - 获取 Telegram 群的所有用户

php - 我如何在 while 循环中回显来自 mysql 的两条不同记录

mysql - mysql中的关系划分没有聚合函数?

javascript - 大 for 循环挂起 javascript 引擎

mysql - 在 Node 循环中选择和插入未按预期工作