NodeJS MySQL如何获得查询function以外的结果

我似乎无法弄清楚如何获得NodeJS MySQL池查询以外的结果。 下面是一些示例代码,以更好地解释我的意思。

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!” 而不是查询。

如果我console.log(结果)在pool.query函数内,它返回查询中的行,但我似乎无法获得该函数以外的数据。 我logging了function,并检查了所有相关的function,我想我只是缺less一些基本的东西。

在查询结束之前(以及调用callback),您将发送结果。 在您的callback中发送结果将解决问题:

 pool.query('SELECT * from user LIMIT 10', function (err, rows) { result = rows; res.send(result); }); 

正如亚伦指出的那样,这是一个普遍的问题。 更彻底的答案可以在这里find。

池查询function是asynchronous的。 这意味着你的代码不会按照你声明的语句的顺序执行。

您启动一个查询,并指定查询asynchronous操作完成时应运行的callback函数。

res.send将在查询和callback声明之后立即运行,并且callback将在稍后运行。 当你设定的结果,你已经发送它。

尝试在callback中移动res.send。

 pool.query('SELECT * from user LIMIT 10', function (err, rows) { res.send(rows); });