我是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()
已完成,并且在激活查询之前已建立连接。并且在建立连接之前对查询进行了检查,然后会出现各种错误。异步如何在这里工作?
答案 0 :(得分:2)
我建议您使用knex,这是一个用于热门node-mysql库的简单查询构建器包装器。
初始化knex后,您将获得一个对象是数据库的连接池。该对象可以使用链接的函数来执行查询。查询将返回promise,只有在正确建立连接后才会执行。 Knex会自动为您完成此操作。
您的代码如下:
function getMembers(){
return knex.select().from('members1617')
.then(rows => return rows)
.catch(err => console.log(err))
}
就这么简单。
我还建议您使用诸如Bluebird之类的承诺库,以便您可以正确处理承诺和承诺链。
请注意:无论您是否选择使用knex或node-mysql,我强烈建议您学习如何使用promises或生成器来处理Node中的异步控制流。您可以使用几个教程和博客。