我是 NodeJS 新手。我有以下代码片段。
var connection = mysql.createConnection(dbConfig);
connection.connect(function(err) {
if (err)
console.log("MySQL Connection Error: ", err);
else
console.log("Connection successfully established");
});
connection.query("SELECT * FROM `members1617`;",function(err,rows) {
if (err)
console.log("err: ", err);
else
console.log("rows: ",rows);
connection.end();
});
这是错误的代码吗?我认为这是因为无法保证 connection.connect()
完成并且在激活查询之前已经建立了连接。并且在连接建立之前执行查询,那么将会出现各种错误。异步在这里如何工作?
最佳答案
我建议您使用knex ,一个简单的查询生成器包装器,适用于流行的 node-mysql图书馆。
初始化 knex 后,您将得到一个对象,它是数据库的连接池。该对象可以具有与其链接的函数来执行查询。查询将返回 promise ,并且仅在正确建立连接后才会执行。 Knex 会自动为您完成此操作。
您的代码如下所示:
function getMembers(){
return knex.select().from('members1617')
.then(rows => return rows)
.catch(err => console.log(err))
}
就这么简单。
我还建议您使用 Promise 库,例如 Bluebird以便您可以正确处理 Promise 和 Promise 链。
请注意:无论您选择使用 knex 还是 node-mysql,我都强烈建议您学习如何使用 Promise 或 Generator 来处理 Node 中的异步控制流。有多个教程和博客可供您使用。
关于mysql - NodeJS 与 mysql 的异步让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368422/