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

Posted

技术标签:

【中文标题】node.js 从 mysql 查询中获取结果【英文标题】:node.js get result from mysql query 【发布时间】:2017-07-11 11:06:31 【问题描述】:

为什么我不能得到结果?

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: 行未定义

怎么了?..

【问题讨论】:

***.com/questions/16336367/… 【参考方案1】:

您不应该像在代码的第一行中那样将异步函数分配给变量。您只需调用它并使用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);

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

【讨论】:

但是如果我想在查询后使用结果......不可能吗? 你不能。您必须对callback 中的结果执行所有操作,因此您的第一个console.log(rows) 就在哪里。【参考方案2】:

如果你想得到查询结果,你应该使用 then 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;
            

        );
    );


【讨论】:

以上是关于node.js 从 mysql 查询中获取结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 node.js MySQL 从 MySql DB 获取结果并将它们发送回 API.ai - DialogFlow

node.js 异步使用 SQL

使用 Node.JS 查询 MySQL 并在网页中显示结果

MySQL 结果来自 html 中的 node.js,由 react.js

node.js 同步 mysql 查询

带有mysql查询的异步函数不会返回查询结果node.js