我想在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。抱歉,但我的英文不好
答案 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
更改为JOIN
到users
表,在messages_query
中获取您想要的字段。这样做意味着您没有转置结果。