[英]How do I pass values from my express middleware function?
我是Javascript / Node / Express的初學者。
我正在嘗試從Facebook Graph API獲取一些數據,並具有如下所示的Express中間件功能。
我要實現的是:
從Facebook獲取用戶身份驗證令牌-完成將用戶身份驗證令牌傳遞給中間件功能-完成檢索數據並將其以圖形形式顯示在屏幕上-使用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內部看到在數組中設置的值,但是數組外面是空的。
我的假設是,此函數的作用域范圍內的數組印象和日期都是全局的,因此不應重置。
我要去哪里錯了?
替換此行:
return next();
同
next();
在中間件中,下一個功能可幫助您將數據傳遞到下一個中間件。
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();
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.