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