NodeJS MySQL如何在查询函数之外获取结果

时间:2015-05-14 16:27:47

标签: javascript mysql node.js express connection-pooling

我似乎无法弄清楚如何在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),它会从查询中返回行,但我似乎无法获取函数之外的数据。我已经记录了该功能并检查了所有相关功能,我想我只是遗漏了一些基本功能。

2 个答案:

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