簡體   English   中英

如何從我的快速中間件函數傳遞值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM