2017-04-02 39 views
0

我正在使用Facebook Graph NodeJS API来获取user_posts。该响应具有分页,因此我需要遍历响应来获取所有帖子。我使用下面的路由来获取Facebook的职位,我使用get_user_statuses功能遍历分页:响应对象在函数中传递时未定义

var posts = ""; 

function get_user_statuses(response_posts, res) { 

    var link_regex = /https?:\/\/(?:www\.|(?!www))[^\s\.]+\.[^\s]{2,}|www\.[^\s]+\.[^\s]{2,}/g; 
    var isNextPageAvailable = true; 

    if ("paging" in response_posts) { 
     var nextPage = response_posts.paging.next; 
     isNextPageAvailable = true; 

    } else { 
     isNextPageAvailable = false; 
    } 

    for (var i = 0; i < response_posts.data.length; i++) { 

     var post = response_posts.data[i].message + " "; 

     if ("message" in response_posts.data[i]) { 
      posts += post.replace(link_regex, ""); 
     } 
    } 

    if (nextPage !== undefined) { 
     request(nextPage, function (error, response, body) { 

      if (!error && response.statusCode === 200) { 
       get_user_statuses(JSON.parse(body)); 

      } else { 
       console.log(error); 
      } 
     }); 
    } 

    if (!isNextPageAvailable){ 
     //Sending posts to facebook Modal 
     console.log(posts); 
     res.send(JSON.stringify({posts: posts})); //res is not defined here 
    } 
} 

router.post('/fbData', function (req, response, next) { 

    FB.setAccessToken(req.body.access_token); 
    FB.api('/me?fields=posts&posts.limit=1000', function (res) { 

     if (!res || res.error) { 
      if (!res) { 
       response.send(JSON.stringify({error: 'An error occurred. Please try again.'})) 
      } 
      response.send(JSON.stringify({error: response.error})); 
      return; 
     } 

     get_user_statuses(res.posts, response); //Passing response object here 

    }); 
}); 

的问题是,从快递route传递response对象get_user_statuses功能没有定义。现在我有两个问题:

  1. 为什么响应对象没有定义?
  2. 是否有更好的方法来实现这种安排?

回答

0

res没有定义的,因为你忘了把它传递在内部调用。更改get_user_statuses(JSON.parse(body));get_user_statuses(JSON.parse(body), res);,它应该工作

+0

嘿谢谢你的回应。我发现使用我的答案中提到的链接实现我的目标更优雅的方式。 –