JavaScript / CoffeeScript返回“[object Object]”而不是正确的值

时间:2013-04-29 14:50:05

标签: javascript mysql node.js return-value

我写了一个nodejs Server。

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打印“[object Object]”。

有什么问题?

1 个答案:

答案 0 :(得分:5)

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