2015-12-30 71 views
1

我是Javascript/Node/Express的初学者。如何从我的快递中间件功能中传递值?

我想从Facebook Graph API获取一些数据,并具有Express中间件功能,如下所示。

我想实现的是: -

获得来自Facebook的用户身份验证令牌 - 完成 传递用户身份验证令牌中间件功能 - 完成 检索数据,并在屏幕的上显示graph - 使用chart.js作为前端图表,但我无法在那里发送这些数据。

function getFBData(req, res, next){ 
var impressions = []; 
var dates = []; 
graph.setAccessToken(req.user.facebook.token); 
//graph.get("me/accounts", function(err,res){ 
// console.log(res); 
//}); 

//var impressions = []; 
//var dates = []; 
graph.get("{page-id-placeholder}/insights/page_impressions/day",function(err,res){ 

//console.log(res); 
//console.log(res.data[0]); 
for(i=0; i<res.data[0].values.length; i++){ 
setArrayData(impressions, res.data[0].values[i].value); 
setArrayData(dates, res.data[0].values[i].end_time); 
} 

console.log("inside!!"); 
console.log(impressions); 
console.log(dates); 

}); 

function setArrayData(array, value){ 
console.log("Pushing " + value + "into " + array); 
array.push(value); 
console.log("Now the array contains " + array); 
} 

console.log("Impressions = " + impressions); 
console.log("Dates = " + dates); 
res.locals.FBData = [impressions, dates] 
console.log(res.locals.FBData); 
return next(); 

} 

现在我面临的问题是,该阵列是在res.locals.FBData设定

我想我做错事的时候空基本JavaScript,但没能引脚指出它是什么。

编辑: - 我能够通过函数setArrayData以及在graph.get语句console.log中看到数组中设置的值,但数组在外面是空的。

我的假设是数组展示和日期在范围内都是全局的,并且不应该被重置。

我哪里错了?

回答

0

Graph.get是异步的。你需要做的是这样的:

function getFBData(req, res, next){ 
    var impressions = []; 
    var dates = []; 

    graph.setAccessToken(req.user.facebook.token); 

    graph.get("{page-id-placeholder}/insights/page_impressions/day",function(err,res){ 

     for(i=0; i<res.data[0].values.length; i++){ 
      impressions.push(res.data[0].values[i].value); 
      dates.push(res.data[0].values[i].end_time); 
     } 

     console.log("Impressions = " + impressions); 
     console.log("Dates = " + dates); 
     res.locals.FBData = [impressions, dates] 
     console.log(res.locals.FBData); 
     return next(); 

    }); 

} 
0

替换此行:

return next(); 

next(); 

在中间件接下来的功能可帮助您将数据传递到下一个中​​间件。

+0

我不是在这一点本身 的console.log(“印象=” +感想)得到的值; console.log(“Dates =”+ dates); res.locals.FBData = [印象,日期] console.log(res.locals.FBData); –