簡體   English   中英

發出多個請求並將它們傳遞到模板(Express + Node.js + FB打開圖)

[英]Making multiple requests and passing them to a template (Express + Node.js + FB open graph)

我正在使用此Facebook SDK構建Express Node.js應用,這是我當前的root路由:

app.get('/', Facebook.loginRequired(), function (req, res) {

    req.facebook.api('/me', function(err, user) {

        res.render('index', {title: 'title', user: user});

    });


});

我正在調用FB開放圖URL http://graph.facebook.com/me ,但是我想進行多個開放圖調用以傳遞到我的模板。 例如:

var APIcalls = ['/me', '/me/music', '/me/music.listens'];

req.facebook.api(APIcalls, function(err, res1, res2, res3){

    res.render('index', {res1: res1, res2: res2, res3: res3});

});

將多個API調用到Facebook,然后將響應相應地傳遞到我的模板的最簡單方法是什么? 您可以在此處查看我的完整app.js文件 謝謝!

這種情況對於async.map來說似乎是完美的,請參見此處: https : //github.com/caolan/async#map

async.map方法接收一個項目數組,並並行地對數組中的每個項目執行相同的異步調用。 如果沒有遇到錯誤,它將調用帶有新結果數組的回調。

因此您的示例將如下所示:

var async = require('async'),
    APIcalls = ['/me', '/me/music', '/me/music.listens'];

async.map(APIcalls, 
  function(item, callback){
    req.facebook.api(item, function(err, user) {
      if(err){
        return callback(err); 
      };
      callback(null, user);
  });},
  function(err, results){
    if(err){
      throw new Error(err);
    }
    res.render('index', results);
  }
);

為此,您應該使用批處理,以便僅通過一個對Graph API的請求就可以擺脫困境。

FB.api('/', 'POST', {
    batch: [{
      relative_url: '/me'
    },{
      relative_url: '/me/music'
    },{
      relative_url: '/me/music.listens'
    }]
  }, function(o) {
    console.log(o);
  });

或者,您可以使用multi-fql

FB.api('/fql', {
    q1: 'select ....',
    q2: 'select ...'
  }, function(o) {
    console.log(o);
  });

完成此操作后,您只需將數據合並到傳遞給渲染器的單個模型中即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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