首先,我连接数据库并选择DB:
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);
没什么输出???为什么??
答案 0 :(得分:7)
由于node.js是非阻塞和异步的,因此在此代码中:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
self.users = results;
}
});
console.log(this.users);
当您尝试将数据记录到控制台时,来自数据库的数据可能尚未加载到用户变量中。如果您在查询中执行console.log
操作,则可以查看它,例如:
client.query("SELECT * FROM users", function (error, results, fields) {
if (error) {
//
}
if (results.length > 0) {
console.log(results);
}
});
要在操作完成时将结果传递给变量,可以将客户端DB调用包装到带有callback参数的函数中,并在调用回调时设置变量,例如:
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);
});
以上代码只是一个概念。
答案 1 :(得分:0)
建议的答案与此有何不同?
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);
}
});
我可能错了,这与建议的答案没有什么不同,因为它会在我们从数据库返回数据之前写入控制台。
建议的答案似乎只是增加了另一个功能?