2013-04-29 127 views
1

我寫了一個nodejs Server。JavaScript/CoffeScript返回「[object Object]」的右值

app.get("/admin", function (req, res) { 
    var connection, value; 
    connection = mysql.createConnection({ 
     host: "******", 
     user: "*****", 
     password: "****", 
     database: "YaAMP", 
     insecureAuth: true 
    }); 
    value = mySQLgetValue("SELECT property, value FROM config WHERE property = 'primeMult'", connection); 
    console.log("Return Value" + value); //returns "[object Object]" 
    connection.end(); 
    return res.render("admin", { 
     title: "YaAMP" 
    }); 
}); 

而一個mySQLgetValue函數來獲取從MySQL數據庫,這應該從數據庫返回的特定值的值。

mySQLgetValue = function (queryString, connection) { 
    var value; 
    value = 0; 
    return connection.query(queryString, function (err, rows, fields) { 
     console.log("Value " + rows[0].value); //Returns correct value 
     return value += rows[0].value; 
    }); 
}; 

mySQLgetValue功能console.log返回從DB正確的值。但函數調用返回一個Objectconsole.log打印「[對象對象]」。

出了什麼問題?

+0

'mySQLgetValue'是否真的同步? – 2013-04-29 15:06:22

回答

4

console.log()是可變的,所以用逗號代替+

console.log("Return Value", value); 

+做字符串連接,它調用的對象,這就是爲什麼你都拿到[object Object].toString()


你不能從你傳遞給connection.query回調return價值,因爲你不是一個調用該函數。

而是爲您的函數定義另一個參數,以接收在傳遞給connection.query的回調中調用的回調函數。這將取代return聲明。

app.get("/admin", function (req, res) { 
    var connection, value; 
    connection = mysql.createConnection({ 
     host: "******", 
     user: "*****", 
     password: "****", 
     database: "YaAMP", 
     insecureAuth: true 
    }); 

    var q = "SELECT property, value FROM config WHERE property = 'primeMult'"; 

    // Pass a callback-----------------v 
    mySQLgetValue(q, connection, function(val) { console.log(val); }); 

    connection.end(); 

    return res.render("admin", { 
     title: "YaAMP" 
    }); 
}); 

     // callback parameter ------------------------v 
mySQLgetValue = function (queryString, connection, callback) { 
    var value; 
    value = 0; 
    return connection.query(queryString, function (err, rows, fields) { 
     console.log("Value " + rows[0].value); 

     // Invoke your callback 
     callback(value += rows[0].value); 
    }); 
}; 
+0

現在console.log outupt是這樣的: http://pastebin.com/y0gK1900 – Penta 2013-04-29 15:01:26

+0

@ user2330362:它記錄你收到的對象。如果結果不符合您的預期,請查看API文檔。 – 2013-04-29 15:09:20

+0

但在我的函數中,我得到正確的值,只有在返回後,我得到這個對象,我不期望。 – Penta 2013-04-29 15:26:16

相關問題