【问题标题】:JavaScript/CoffeScript returns "[object Object]" insted of right value [closed]JavaScript/CoffeeScript 返回“[object Object]”而不是正确的值 [关闭]
【发布时间】:2013-04-29 23:37:30
【问题描述】:

我写了一个nodejs服务器。

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 从数据库返回正确的值。但是函数调用返回一个Objectconsole.log 打印“[object Object]”。

怎么了?

【问题讨论】:

  • mySQLgetValue 真的同步吗?

标签: javascript mysql node.js return-value


【解决方案1】:

console.log() 是可变参数,因此请使用逗号而不是 +

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

+ 执行字符串连接,它在对象上调用.toString(),这就是您得到[object Object] 的原因。


您无法从传递给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);
    });
};

【讨论】:

  • 现在 console.log 输出是这样的:pastebin.com/y0gK1900
  • @user2330362:它正在记录您收到的对象。如果结果不符合您的预期,请查看 API 文档。
  • 但是在我的函数中我得到了正确的值,只有在返回它之后我才会得到这个我没想到的对象。
  • @user2330362:哦,我明白了。您不能从回调中返回任何内容。内部return value += rows[0].value 被返回到调用回调的内部代码。您需要做的是向您的函数添加另一个参数,并将一个函数传递给该参数,然后在当前回调中调用该函数,并将值传递给它。我会更新来演示一下。
猜你喜欢
  • 2018-05-24
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 2011-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多