如何使用mysql包得到nodejs的结果?

首先,我连接数据库并selectDB:

var defaultOptions = { user: "root", pwd:'admin', db:"britcham_dev_local", server:"local", // Maybe we don't need this variable. }; var client = new Client(); client.user = defaultOptions.user; client.password = defaultOptions.pwd; client.connect(function (error, results) { // }); client.query('USE ' + defaultOptions.db, function (error, results) { // }); 

其次,我用客户端对象查询:

 var self = this; var this.users; client.query("SELECT * FROM users", function (error, results, fields) { if (error) { // } if (results.length > 0) { self.users = results; } }); console.log(this.users); 

这是什么输出? 为什么?

由于node.js是非阻塞和asynchronous的,因此在这个代码中:

 client.query("SELECT * FROM users", function (error, results, fields) { if (error) { // } if (results.length > 0) { self.users = results; } }); console.log(this.users); 

当您尝试将数据logging到控制台时,数据库中的数据可能不会加载到用户variables中。 如果在查询中执行console.log操作,则可以检查它,例如:

 client.query("SELECT * FROM users", function (error, results, fields) { if (error) { // } if (results.length > 0) { console.log(results); } }); 

要在操作完成时将结果传递给variables,可以将客户端数据库调用包装为具有callback参数的函数,并在调用callback时设置variables,例如:

 function query(sql, callback) { client.query(sql, function (error, results, fields) { if (error) { // } if (results.length > 0) { callback(results); } }); } query("SELECT * FROM users", function(results) { self.users = results; console.log(self.users); }); 

以上代码只是一个概念。

build议的答案与此有何不同?

 var self = this; var this.users; client.query("SELECT * FROM users", function (error, results, fields) { if (error) { // } if (results.length > 0) { self.users = results; console.log(this.users); } }); 

我可能是错的,这与build议的答案没有什么不同,因为它不会比从数据库返回数据时写入控制台。

build议的答案似乎只是增加了另一个function?