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

use*_*759 5 mysql node.js

首先,我连接数据库并选择数据库:

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) {
   // 
});
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

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

yoj*_*o87 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);
Run Code Online (Sandbox Code Playgroud)

当您尝试将数据记录到控制台时,来自DB的数据可能尚未加载到用户变量中.如果console.log在查询中执行操作,可以查看它,例如:

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

要在操作完成时将结果传递给变量,可以将客户端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);
});
Run Code Online (Sandbox Code Playgroud)

上面的代码只是一个概念.