我想在node.js中使用mysql函数的变量到外部

时间:2014-10-15 12:17:57

标签: javascript mysql node.js socket.io

我想在node.js中使用mysql函数的变量到外部。我正在做两个查询。但我无法访问该变量。我使用了全局变量,但结果是一样的。如何访问变量?

我的代码似乎是:

// Mysql query...
mysql.query(messages_query, function(err, result) {

    // Add the results in socket...
    if(result.length > 0) {

        // messages array
        var messages = [];

        // Foreach 
        result.forEach(function(message){

            // User query...
            var user_query = 'SELECT id, username, avatar FROM users WHERE id = '+message["from"];

            // Second mysql query...
            mysql.query(user_query, function(err, result) {

                // Add result to global function
                if(result.length > 0) global.user += result;
                else console.log("User not found");

            }); 

            // Message array
            message["from"] = global.user;

            // Concat...
            var messages = messages.concat(message);

        });

        console.log("--- MESSSAGES ---");
        console.log(messages);
        // Users are undefined

    } else console.log("User not found");

});

PS。抱歉,但我的英文不好

1 个答案:

答案 0 :(得分:1)

所以我们在这里遇到了许多问题或误解。首先,这两行相互冲突:

var messages = [];
var messages = messages.concat(message);

至少第二行应该是:

messages.push(message);

向数组添加消息。但是,更基本的问题是误解您的代码是同步的。以下调用是异步的:

mysql.query...
result.forEach...
mysql.query...

你有第一个正确,但其他两个可能被滥用。我认为你实际上正在寻找这样的东西:

// Mysql query...
mysql.query(messages_query, function(err, result) {

    // Add the results in socket...
    if(result.length > 0) {
        // messages array
        var messages = [];

        // Foreach 
        for (int i = 0; i < result.length; i++) {
            // User query...
            var user_query = 'SELECT id, username, avatar FROM users WHERE id = ' + result[i].from;

            // Second mysql query...
            mysql.query(user_query, function(err, userResult) {
                // Add result to global function
                if(userResult.length > 0) {
                    result[i].from = userResult.username;
                    messages.push(result[i]);
                }
                else {
                    console.log("User not found");
                }
            }); 
        }

        console.log(messages);
    }
    else {
        console.log("User not found");
    }
});

注意:虽然以上内容可能有效,但我最需要将messages_query更改为JOINusers表,在messages_query中获取您想要的字段。这样做意味着您没有转置结果。