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