[英]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
更改为JOIN
到users
表,并在messages_query
获取想要的字段。 这样做将意味着您没有转置结果的权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.