mysql 的 NodeJS 异步让我感到困惑
NodeJS Async with mysql is confusing me
我是 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, a simple query builder wrapper for the popular node-mysql 库。
初始化 knex 后,您将获得一个对象,它是您数据库的连接池。该对象可以具有与其链接的函数以执行查询。查询将 return 承诺,并且只有在正确建立连接后才会执行。 Knex 会自动为您完成此操作。
您的代码如下所示:
function getMembers(){
return knex.select().from('members1617')
.then(rows => return rows)
.catch(err => console.log(err))
}
就这么简单。
我还建议您使用诸如 Bluebird 之类的 promise 库,以便您可以正确处理 promise 和 promise 链。
请注意:无论您选择使用 knex 还是 node-mysql,我都强烈建议您学习如何使用 promises 或生成器来处理 Node 中的异步控制流。有几个教程和博客供您使用。
我是 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, a simple query builder wrapper for the popular node-mysql 库。
初始化 knex 后,您将获得一个对象,它是您数据库的连接池。该对象可以具有与其链接的函数以执行查询。查询将 return 承诺,并且只有在正确建立连接后才会执行。 Knex 会自动为您完成此操作。
您的代码如下所示:
function getMembers(){
return knex.select().from('members1617')
.then(rows => return rows)
.catch(err => console.log(err))
}
就这么简单。
我还建议您使用诸如 Bluebird 之类的 promise 库,以便您可以正确处理 promise 和 promise 链。
请注意:无论您选择使用 knex 还是 node-mysql,我都强烈建议您学习如何使用 promises 或生成器来处理 Node 中的异步控制流。有几个教程和博客供您使用。