JavaScript/CoffeScript返回正确值的"[object Object]"

Pen*_*nta 1 javascript mysql return-value node.js

我写了一个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"
    });
});
Run Code Online (Sandbox Code Playgroud)

还有一个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;
    });
};
Run Code Online (Sandbox Code Playgroud)

console.logmySQLgetValue函数返回从DB正确的值.但函数调用返回Objectconsole.log打印"[object Object]".

怎么了?

小智 5

console.log()是可变参数,那么使用逗号,而不是+.

console.log("Return Value", value);
Run Code Online (Sandbox Code Playgroud)

+做字符串连接,它调用.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);
    });
};
Run Code Online (Sandbox Code Playgroud)