你好朋友我是节点js的新手,我们怎样才能获得mysql查询匿名函数中使用的变量值?
var alldata = function(){
var http = require('http'), mysql = require('mysql');
var client = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: ''
});
client.connect();
client.query("use cakephp2");
client.query("SELECT id, title,body,created from posts",
function(err, results, fields) {
if (err) throw err;
var output = '<h1>Latest Posts</h1><ul><table border=1><tr>';
for (var index in fields) {
output += '<td>' + fields[index].name + '</td>';
}
output += '</tr>';
for (var index in results) {
output += '<tr><td>' + results[index].id + '</td>';
output += '<td>' + results[index].title + '</td>';
output += '<td>' + results[index].body + '</td>';
output += '<td>' + results[index].created + '</td></tr>';
}
output += '</ul>';
// console.log(output);
// return output;
}
);
return output ;
}
exports.alldatas = alldata();
在上面的代码中我没有在client.query中找到返回输出结果,当使用console.log(输出)给出正确的结果,但是无法访问匿名函数之外的输出值。
请帮帮我
提前致谢。
答案 0 :(得分:2)
您将无法在回调函数之外访问该变量。原因是,Node.js具有一个特殊功能,即将回调函数作为执行异步IO任务后执行的下一个代码块(在您的情况下是一个mysql查询)。
当您的程序进入IO模式时,您在回调函数之后编写的代码会立即执行。并且output
变量尚未就绪,直到触发回调。因此你无法访问它。
您可以阅读here
你必须使用该回调函数中的output
或在那里调用其他函数并将output
作为参数传递给它。
答案 1 :(得分:0)
尝试此操作并将变量范围定义为全局变量
DBDATA="";
var alldata = function(){
var http = require('http'), mysql = require('mysql');
var client = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: ''
});
client.connect();
client.query("use cakephp2");
client.query("SELECT id, title,body,created from posts",
function(err, results, fields) {
if (err) throw err;
var output = '<h1>Latest Posts</h1><ul><table border=1><tr>';
for (var index in fields) {
output += '<td>' + fields[index].name + '</td>';
}
output += '</tr>';
for (var index in results) {
output += '<tr><td>' + results[index].id + '</td>';
output += '<td>' + results[index].title + '</td>';
output += '<td>' + results[index].body + '</td>';
output += '<td>' + results[index].created + '</td></tr>';
}
output += '</ul>';
DBDATA=output;
// console.log(output);
// return output;
}
);
return output ;
}
console.log(DBDATA);
exports.alldatas = alldata();