1

你好朋友我是node 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(output) 时没有找到返回输出结果,但无法访问匿名函数之外的输出值。

请帮我

提前致谢 。

4

2 回答 2

2

您将无法在回调函数之外访问该变量。原因是,Node.js 具有一个特殊功能,即在执行异步 IO 任务(在您的情况下为 mysql 查询)后,将回调函数作为要执行的下一个代码块传递。

当您的程序进入 IO 模式时,您在回调函数之后编写的代码会立即执行。直到回调被触发,output变量才准备好。因此您无法访问它。

你可以在这里阅读

您将不得不output在该回调函数中使用该回调函数或在那里调用其他函数并将output其作为参数传递给它。

于 2013-08-14T11:11:40.093 回答
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();
于 2013-08-13T12:26:16.213 回答