Javascript 如何在node js mysql查询函数中找到匿名函数外的返回变量值
你好,朋友,我是NodeJS新手,我们如何获得mysql查询匿名函数中使用的变量值Javascript 如何在node js mysql查询函数中找到匿名函数外的返回变量值,javascript,mysql,node.js,anonymous-function,Javascript,Mysql,Node.js,Anonymous Function,你好,朋友,我是NodeJS新手,我们如何获得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
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();
var alldata=function(){
var http=require('http'),mysql=require('mysql');
var client=mysql.createConnection({
主持人:“127.0.0.1”,
用户:'根',
密码:“”
});
client.connect();
client.query(“使用cakephp2”);
client.query(“选择id、标题、正文、从帖子创建的内容”,
函数(错误、结果、字段){
如果(错误)抛出错误;
var输出='最新发布';
for(字段中的var索引){
输出+=''+字段[索引]。名称+'';
}
输出+='';
for(结果中的var指数){
输出+=''+结果[索引].id+'';
输出+=''+结果[索引]。标题+'';
输出+=''+结果[索引]。正文+'';
输出+=''+结果[索引]。已创建+'';
}
输出+='
';
//控制台日志(输出);
//返回输出;
}
);
返回输出;
}
exports.alldatas=alldata();
在上面的代码中,我在client.query中使用console.log(output)时未找到返回的输出结果,但无法访问匿名函数之外的输出值
请帮帮我
提前感谢。尝试此操作并将变量范围定义为全局变量
DBDATA=”“;
var alldata=function(){
var http=require('http'),mysql=require('mysql');
var client=mysql.createConnection({
主持人:“127.0.0.1”,
用户:'根',
密码:“”
});
client.connect();
client.query(“使用cakephp2”);
client.query(“选择id、标题、正文、从帖子创建的内容”,
函数(错误、结果、字段){
如果(错误)抛出错误;
var输出='最新发布';
for(字段中的var索引){
输出+=''+字段[索引]。名称+'';
}
输出+='';
for(结果中的var指数){
输出+=''+结果[索引].id+'';
输出+=''+结果[索引]。标题+'';
输出+=''+结果[索引]。正文+'';
输出+=''+结果[索引]。已创建+'';
}
输出+='
';
DBDATA=输出;
//控制台日志(输出);
//返回输出;
}
);
返回输出;
}
log(DBDATA);
exports.alldatas=alldata();
您将无法在回调函数之外访问该变量。原因是,Node.js有一个特殊功能,即在执行异步IO任务(在您的示例中是mysql查询)后,将回调函数作为下一个要执行的代码块传递
当程序进入IO模式时,回调函数立即执行后编写的代码。而输出
变量在启动回调之前尚未准备就绪。因此,您无法访问它
你可以阅读
您必须在该回调函数中使用
输出
,或者在那里调用其他函数,并将输出
作为参数传递给它。不起作用。。。如何将变量的范围定义为全局变量?见mu更新answer@dianuj您仍在访问传递给client.query
函数的回调之外的输出。正如我在回答中所解释的那样,在那里无法访问输出
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();