NodeJS MySQL如何在查询函数之外获取结果
Posted
技术标签:
【中文标题】NodeJS MySQL如何在查询函数之外获取结果【英文标题】:NodeJS MySQL How to get the result outside of the query function 【发布时间】:2015-07-26 08:52:09 【问题描述】:我似乎无法弄清楚如何在 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!”而不是查询。
如果我在 pool.query 函数中使用 console.log(result),它会返回查询中的行,但我似乎无法在函数之外获取数据。我已经记录了这个函数并检查了所有相关的函数,我想我只是缺少一些基本的东西。
【问题讨论】:
Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference的可能重复 你知道怎么做吗?到目前为止,这里的每个人似乎都间接回答了这个问题。那些发布在答案上的链接和上面的评论 - 老实说,虽然需要知道,但 TMI - 至少现在是这样,因为我们无法立即直接体验有效的解决方案。我希望至少有一个示例代码,其中包含所有必需的元素,以亲眼目睹解决方案是否以及如何工作。 developer.mozilla.org/en-US/docs/Web/javascript/Reference/… node 版本 8 up + async / await 在函数回调中 这个问题你解决了吗 【参考方案1】:您在查询完成(并调用回调)之前将结果发回。在您的回调中发送结果将解决问题:
pool.query('SELECT * from user LIMIT 10', function (err, rows)
result = rows;
res.send(result);
);
正如 Aaron 所指出的,这是一个常见问题。更全面的答案可以在here找到。
【讨论】:
【参考方案2】:池查询功能是异步的。这意味着您的代码不会按照您声明语句的顺序执行。
您启动一个查询并指定一个回调函数,该函数应在查询异步操作完成时运行。
res.send 将在查询和回调声明之后立即运行,而回调将在很晚的时候运行。当您设置结果时,您已经发送了它。
尝试将你的 res.send 移动到回调中。
pool.query('SELECT * from user LIMIT 10', function (err, rows)
res.send(rows);
);
【讨论】:
以上是关于NodeJS MySQL如何在查询函数之外获取结果的主要内容,如果未能解决你的问题,请参考以下文章