繁体   English   中英

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

[英]I want use mysql function's variable to the outside in node.js

我想在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。 对不起,但是我的英语不好

因此,我们这里有许多问题或误解。 首先,这两行是相互冲突的:

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获取想要的字段。 这样做将意味着您没有转置结果的权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM