2016-01-16 1 views
0

У меня есть следующий яваскрипта Node.js код:Узел http.ClientRequest не срабатывает «ошибка» событие

var options = { 
     host: "x.y.z" 
     ,path: "/api/abc/" 
     ,method: "GET" 
    }; 

    var req = http.request(options); 

    req.on('response' , function(data) { 
     console.log("response: ",data.statusCode); 
     done(); 
    }); 

    req.on('error' , function() { 
     console.log("error"); 
     done(); 
    }); 

    req.end(); 

Я не могу получить error событие, когда происходит фактическая ошибка запроса HTTP. Что мне не хватает?


Предварительные выводы: Казалось бы, что в случае неудачи «нет ответа от сервера» (например, из-за неполадки в сети) не срабатывает какое-либо событие. Итак, обходным путем является создание «таймера» и ловушка этого условия самостоятельно.

+0

Ваш код работает как (с 'done' вызовы удаляются и' вар HTTP = требуется (» http '), 'добавлено, конечно). Обработчик 'error' вызывается немедленно, если ошибка немедленна (например, соединение отказано, домен не найден ...), немного позже, если ошибка занимает некоторое время (например, время ожидания). – jcaron

ответ

0

Попробуйте использовать инструкцию if/else вместо двух независимых функций.

if(response you want && response.statusCode = 200){ 
    //logic 
} else { 
    //console.log("error") 
} 
+0

Это работает только при получении от сервера фактического ответа. Многие случаи отказа - результат чего-то другого. – jldupont

+0

Мне понадобится больше контекста, чтобы изучить это дальше, чем код, который вы предоставили, если вы даже не получаете ответа от сервера. – AlexanderGriffin

+0

. когда сервер не отвечает на запрос, событие «ошибка» не запускается. Другими словами, как мы можем уловить тот факт, что ответа не было получено? Нужно ли настраивать таймер только для этого? – jldupont

0

Вы должны создать свою собственную функцию таймаута внутри запроса. На самом деле, я считаю, что через много времени (может быть, минут?) Запрос потерпит неудачу. Но, если вам требуется что-то более раньше, вы можете проверить эту нить, которая просит за то же самое:

How to set a timeout on a http.request() in Node?

Смежные вопросы