2012-02-01 55 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