node.js从mysql查询中获取结果

时间:2017-02-21 17:18:29

标签: mysql node.js

为什么我无法获得结果?

var sql_data = connection.query(sql, function(error, results, fields) {
    if(error) {
        console.log(error);
            return;
    }
    var rows = JSON.parse(JSON.stringify(results[0]));
    console.log(rows);
});
console.log(rows);

第一个console.log没关系,显示对象, 但第二个说:

  

ReferenceError:未定义行

出了什么问题?..

2 个答案:

答案 0 :(得分:3)

如果要获取查询结果,则应使用 Promise 。我希望它显得活泼。 Promise运行命令async。

function getDomain() {
    return result = await dbQuery('SELECT name FROM virtual_domains ORDER BY id;');
}

// * Important promise function
function dbQuery(databaseQuery) {
    return new Promise(data => {
        db.query(databaseQuery, function (error, result) { // change db->connection for your code
            if (error) {
                console.log(error);
                throw error;
            }
            try {
                console.log(result);

                data(result);

            } catch (error) {
                data({});
                throw error;
            }

        });
    });

}

答案 1 :(得分:2)

您不应该像在代码的第一行那样为变量分配异步函数。您只需使用callback方法调用它并对结果执行操作(在本例中为function(error, results, fields)。您的代码应如下所示

connection.query(sql, function(error, results, fields) {
    if(error) {
        console.log(error);
        return;
    }
    var rows = JSON.parse(JSON.stringify(results[0]));

    // here you can access rows
    console.log(rows);
});

// here it will be undefined
console.log(rows);

第二个rows中的console.log变量将是未定义的,因为它是在不同的范围内定义的。即使您在var rows之上connection.query,它仍然是未定义的,因为您在异步函数的回调中分配了它的值。您需要阅读有关此类操作的更多信息。