如何使用mysql包从nodejs获取结果?

时间:2011-05-11 13:24:24

标签: mysql node.js

首先,我连接数据库并选择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);

没什么输出???为什么??

2 个答案:

答案 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);
    }
});

我可能错了,这与建议的答案没有什么不同,因为它会在我们从数据库返回数据之前写入控制台。

建议的答案似乎只是增加了另一个功能?