我似乎无法弄清楚如何在NodeJS MySQL Pool查询之外获取结果。以下是一些示例代码,可以更好地解释我的意思。
var result = 'Hello world!';
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 100,
host : process.env.DB_HOST,
user : process.env.DB_USERNAME,
password : process.env.DB_PASSWORD,
database : process.env.DB_DATABASE
});
pool.query('SELECT * from user LIMIT 10', function (err, rows) {
result = rows;
});
res.send(result);
以上将返回“Hello world!'而不是查询。
如果我在pool.query函数中调用console.log(result),它会从查询中返回行,但我似乎无法获取函数之外的数据。我已经记录了该功能并检查了所有相关功能,我想我只是遗漏了一些基本功能。
答案 0 :(得分:1)
您将在查询完成之前发回结果(并调用回调)。在回调中发送结果将解决问题:
pool.query('SELECT * from user LIMIT 10', function (err, rows) {
result = rows;
res.send(result);
});
正如亚伦所指出的,这是一个普遍的问题。可以找到更全面的答案here。
答案 1 :(得分:0)
池查询功能是异步的。这意味着您的代码不会以您声明语句的相同顺序执行。
启动查询并指定一个回调函数,该函数应在查询异步操作完成时运行。
res.send将在查询和回调声明之后立即运行,并且回调将在稍后运行。当您设置结果时,您已经发送了它。
尝试在回调中移动res.send。
pool.query('SELECT * from user LIMIT 10', function (err, rows) {
res.send(rows);
});