Javascript 如何将作用域传递给节点mysql中的回调?

Javascript 如何将作用域传递给节点mysql中的回调?,javascript,mysql,node.js,callback,scope,Javascript,Mysql,Node.js,Callback,Scope,我从以下代码中得到一个客户端未定义错误: var mysql = require('mysql'); var conf = { 'database':'database', 'user':'user', 'password':'password' }; function mysqlQuery(mysql, conf, query, callback) { var client = mysql.createClient({ user:conf.user, pass

我从以下代码中得到一个
客户端未定义
错误:

var mysql = require('mysql');
var conf = {
  'database':'database',
  'user':'user',
  'password':'password'
};

function mysqlQuery(mysql, conf, query, callback) {
  var client = mysql.createClient({
    user:conf.user,
    password:conf.password
  });
  client.query('USE ' + conf.database, function () {
    client.query(query, callback);
  });
}

mysqlQuery(
  mysql,
  conf,
  'SELECT * FROM users;',
  function selectCb(err, results) {
    if (err) {
      throw err;
    }
    console.log(results);
    client.end();
  }
);
如何将客户机变量传递给回调函数?在mysql模块调用回调函数时,我无法控制回调函数的调用方式。

您可以
client
to
callback
。在回调中,它将作为
提供,然后:

client.query(query, callback.bind(client))

也可以将其作为第一个参数传递:

client.query(query, callback.bind(null, client))

其中,
回调
定义为

function selectCb(client, err, results) {..};

第三个选项更好,它将
client
作为
client
传递,而不是
this
,使代码更易于理解。
client.query(query, function(err, results) {
    callback(client, err, results);
});
function selectCb(client, err, results) {..};