2016-05-22 12 views
0

Ближайшая проблема, которую я нашел для себя, - here. Я считаю, что получаю эту ошибку от того, как настроены мои вызовы .end(). Вот код, мы работаем с:Node.js - Не удается отправить заголовки после их отправки

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

Я попытался установить одну из .end() с с обратным вызовом, .end(addAnimeRequest(context));, который оставляет меня с сокетом вешают ошибку, так что предположительно что-то в моей функции addAnimeRequest занимает слишком много времени?

Есть ли лучший способ сделать несколько запросов на один и тот же сайт с различными параметрами? Я довольно новичок в Node.js.

ответ

0

Событие data может излучаться более одного раза. Вам нужно будет добавить слушателя для события end, а затем передать все ваши данные. Пример:

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(); 
Смежные вопросы