2016-05-22 8 views
0

Das nächste Problem, das ich gefunden habe, ist here. Ich glaube, ich bekomme diesen Fehler von wie meine .end() Anrufe eingerichtet sind. Hier ist der Code arbeiten wir mit:Node.js - Kopfzeilen können nach dem Senden nicht gesendet werden

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); 
}); 

Ich habe versucht, die Einrichtung eines der .end() s mit einem Rückruf, .end(addAnimeRequest(context));, die mich mit einem Sockel lässt aufhängen Fehler, so vermutlich etwas in meiner Funktion addAnimeRequest dauert zu lange?

Gibt es eine bessere Möglichkeit, mehrere Anfragen auf dieselbe Website mit verschiedenen Optionen zu stellen? Ich bin ziemlich neu bei Node.js.

Antwort

0

Das Ereignis data kann mehr als einmal ausgegeben werden. Sie müssten einen Listener für das Ereignis end hinzufügen und dann alle Ihre Daten übergeben. Beispiel:

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(); 
Verwandte Themen