Estoy usando Facebook Graph NodeJS API para buscar user_posts. La respuesta tiene paginación y, por lo tanto, necesito recorrer la respuesta para obtener todas las publicaciones. Estoy usando la siguiente ruta para buscar publicaciones de Facebook y estoy recorriendo la paginación usando la función 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

    });
});

El problema es que el objeto response pasado del expreso route no está definido en la función get_user_statuses. Ahora tengo dos preguntas:

  1. ¿Por qué el objeto de respuesta no está definido?
  2. ¿Hay un mejor enfoque para lograr este acuerdo?
0
Vaibhav Agarwal 2 abr. 2017 a las 13:15

2 respuestas

La mejor respuesta

res no está definido porque olvidó pasarlo en una llamada interna. Cambie get_user_statuses(JSON.parse(body)); a get_user_statuses(JSON.parse(body), res); y debería funcionar

0
ponury-kostek 2 abr. 2017 a las 13:15

Resolví mi problema. Necesitaba crear una función con una devolución de llamada. En caso de que alguien más esté atrapado en este tipo de problema, esta publicación me ayudó a resolverlo:

[Cómo recurrir asincrónicamente sobre devoluciones de llamada API en node.js?

0
Community 23 may. 2017 a las 11:46