2011-12-28 14 views
11

gdy próbuję użyć modułu http dostęp do nieistniejącego hosta, na przykład:Jak wykryć błąd HTTP node.js na nieistniejącym hoście?

requestToRemote = http.createClient(80, 'fjasdfhasdkfj.vvvxcz').request(
    method, 
    path, 
    headers 
); 

Ale pojawia się następujący błąd:

node.js:201 
     throw e; // process.nextTick error, or 'error' event on first tick 
      ^
Error: getaddrinfo ENOENT 
    at errnoException (dns.js:31:11) 
    at Object.onanswer [as oncomplete] (dns.js:140:16) 

chciałbym nadrobić ten błąd, więc próbowałem spróbować/catch i ustawienie detektorów błędów kilka właściwości żądania, ale żaden z, jeśli pracował. Jak mogę złapać błąd?

Odpowiedz

9

Wygląda błąd zostanie wyrzucony z http.Client, nie wniosek. Jak o czymś takim:

var site = http.createClient(80, host); 
site.on('error', function(err) { 
    sys.debug('unable to connect to ' + host); 
}); 
var requestToRemote = site.request(...); 

FYI, http.createClient została zaniechana - dodaje powinien działać z wykorzystaniem metody GET Wygoda:

http.get({host: host}, function(res) { 
    ... 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 
+0

Jak użyć wartości 'res' w wywołaniu zwrotnym, aby zobaczyć, jaki jest tekst odpowiedzi? –

-1

możesz spróbować rozwiązać hosta za pomocą modułu dns przed uruchomieniem kodu.

http://nodejs.org/docs/latest/api/dns.html#dns.resolve

+4

To nie jest dobre rozwiązanie, gdyż wtedy dotyczyć rozwiązywania nazwa hosta dwa razy. Nawet w pamięci podręcznej wciąż istnieje niewielka kara, która może szybko się pomnożyć, w zależności od potrzeb Twojej aplikacji. Oczywiście, możesz wtedy użyć adresu sieciowego zamiast nazwy hosta, gdy wykonasz żądanie, ale musisz obsłużyć nagłówki żądań, które same określają hosta. – Brad

Powiązane problemy