我在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; }
答案 0 :(得分:4)
几乎Node.js中的所有内容都是异步的,而SQL查询函数肯定是异步的。你正在调用conn.query(query, callback)
,这意味着调用了查询,然后一旦在将来某个时候出现结果,你的回调函数就会被调用,结果你可以使用它。所以:
conn.query(query, function(err, rows, fields) {
if (err) return console.error("no results were found!");
processResults(rows, fields);
});
调用conn.query(...)
后,您不会立即得到结果,因此您的代码会在同一时间内执行“其他操作”,并且在某些时候,您的回调将被触发并且您可以获取结果在那里处理。
答案 1 :(得分:0)
conn.query(query, function(err, rows, fields) {
if (err)
console.log("error ocurred",err);
res.send({
"code":400,
"message":"error ocurred"
})
});