2012-02-01 59 views
1

我得到了client is not defined错误了以下代码:如何将范围传递给node-mysql中的回调函数?

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模块调用的。

回答

3

你可以bind[docs]clientcallback。回调里面将作为this则:

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

this.end(); 

你也可以把它作为第一个参数:

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

client.query(query, function(err, results) { 
    callback(client, err, results); 
}); 

哪里callback定义为

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

谢谢!这工作得很好! – 2012-02-01 14:54:47

+0

第三种选择甚至更好,它将'client'作为'client'而不是'this'传递,使得代码更易于理解。 – 2012-02-01 15:05:20