0

The closest issue I've found to mine is here. I believe I'm getting this error from how my .end() calls are set up. Here's the code we're working with:

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

var context = {};

function renderPage(context) {
    res.render('anihome',context);
}

function addRequestToPage(text) {
    context.data = text.toString('utf8');
    context.info = JSON.parse(text);
    return context;
}

function addAnimeToPage(text) {
    context.anime = JSON.parse(text);
    return context;
}

function addAnimeRequest(context) {
   var options2 = {
    host: 'anilist.co',
    path: '/api/anime/20631?access_token=' + context.info.access_token,
    method: 'GET'
    };

    https.request(options2, function(restRes) {
        restRes.on('data',function(jsonResult) {
            //context.anime = JSON.parse(jsonResult);
            //console.log(JSON.parse(jsonResult));
            console.log(context);
            renderPage(context);
        });
    }).end();
}
function addHeaderRequest(context) {
    var options = {
    host: 'anilist.co',
    path: '/api/auth/access_token?grant_type=client_credentials&client_id='
    + clientID + '&client_secret=' + secretKey,
    method: 'POST'
    };     

    https.request(options, function(restRes) {
        restRes.on('data', function(jsonResult) {
            context = addRequestToPage(jsonResult);
            addAnimeRequest(context);
        });
    }).end();
}
addHeaderRequest(context);
});

I've tried setting up one of the .end()s with a callback, .end(addAnimeRequest(context));, which leaves me with a socket hang up error, so presumably something in my addAnimeRequest function is taking too long?

Is there a better way to make multiple requests to the same website with different options? I'm pretty new to Node.js.

Community
  • 1
  • 1

1 Answers1

0

The data event can be emitted more than once. You would need to add a listener for the end event and then pass in all of your data. Example:

https.request(options2, function(restRes) {
    var buf = ''
    restRes.on('data',function(jsonResult) {
        //context.anime = JSON.parse(jsonResult);
        //console.log(JSON.parse(jsonResult));
        buf += jsonResult
    });
    restRes.on('end', function() {
      // TODO JSON.parse can throw
      var context = JSON.parse(buf)
      renderPage(context)
    })
}).end();
Evan Lucas
  • 622
  • 3
  • 6