2013-04-29 1 views
1

Я написал сервер nodejs.JavaScript/CoffeScript возвращает «[object Object]» insted из правильного значения

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; 
    }); 
}; 

console.log в функции mySQLgetValue возвращает правильное значение из БД. Но вызов функции возвращает Object, а console.log печатает «[объект объекта]».

Что не так?

+0

Является ли 'mySQLgetValue' действительно синхронным? –

ответ

4

console.log() является вариационным, поэтому используйте запятую вместо +.

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

+ делает конкатенацию, который вызывает .toString() на объект, поэтому вы получаете [object Object].


Вы не можете получить значение return от обратного вызова, который вы передаете в connection.query, потому что ты не одна вызова этой функции.

Вместо этого определите другой параметр для вашей функции, чтобы получить функцию обратного вызова, которая вызывается внутри обратного вызова, переданного в 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

+0

@ user2330362: Он регистрирует полученный объект. Если результат не соответствует ожидаемому, обратитесь к документации по API. – 2013-04-29 15:09:20

+0

, но в моей функции я получаю правильное значение, только после его возвращения я получаю этот объект, которого я не ожидаю. – Penta

Смежные вопросы