【问题标题】:Node JS MySQL query function not returning resultNode JS MySQL查询函数不返回结果
【发布时间】:2015-07-15 17:24:17
【问题描述】:

我在 Node JS 上运行的 .js 文件中运行 MySQL 查询。我的连接设置正常,查询工作正常,但是当我尝试将结果返回到原始调用时,它似乎不起作用。

function sqlQuery(query){
	console.log("Running query");
	var conn = connection();
	var result = false;
	conn.query(query, function(err, rows, fields) {
	    conn.end();
	    if (!err){ result = rows; } else { result = err; }
	});
	return result;
}

var loginResult = sqlQuery("SELECT * FROM `players`");
console.log(loginResult);

如果我使用以下代码,它会将结果写入查询内的控制台,但不会写入最终的“loginResult”。我没有收到任何错误,所以我的问题是 - 我获取返回结果的方式是否有错误?

if (!err){ result = rows; console.log(rows); } else { result = err; }

【问题讨论】:

    标签: javascript mysql node.js function


    【解决方案1】:

    Node.js 中的几乎所有内容都是异步的,SQL 查询函数肯定是异步的。您正在调用conn.query(query, callback),这意味着调用了查询,然后一旦在将来的某个时间点有结果,您的回调函数就会被调用并使用结果供您使用。所以:

    conn.query(query, function runThisEventually(err, rows, fields) {
        if (err) {
          console.error("One or more errors occurred!");
          console.error(err);
          return;
        }
        processResults(rows, fields);
    });
    

    在调用conn.query(...) 后你不会立即得到结果,所以你的代码会同时做“其他事情”,在某个时候,你的回调将被触发,你可以在那里进行结果处理.

    【讨论】:

    • 我明白,所以基本上它“出现”了,如果我将 console.log(result) 放在函数本身 - 它只有在查询完成后才能访问结果日志事件被调用。在查询仍在运行时记录我的初始 var loginResult 的位置。谢谢!
    【解决方案2】:
    conn.query(query, function(err, rows, fields) {
        if (err) 
            console.log("error ocurred",err);
        res.send({
            "code":400,
            "message":"error ocurred"
        })
    });
    

    【讨论】:

    • 您能否简要介绍一下您的代码如何解决问题?
    猜你喜欢
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2023-02-09
    • 2020-02-03
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    相关资源
    最近更新 更多