2014-02-09 10 views
7

fangen Ich habe eine Liste von Links, die ich vor der Verarbeitung einige Daten überprüfen müssen. Das Überprüfen der Header mit http.get gibt den Fehler zurück:Wie Getaddrinfo ENOTFOUND

events.js:72 
     throw er; // Unhandled 'error' event  
     ^ 
Error: getaddrinfo ENOTFOUND  
    at errnoException (dns.js:37:11) 

Ich kann nicht mit diesem Fehler umgehen und den Prozess beendet. Ich versuchte res.on ("Fehler") und versuchen..catch auf http.get aber nichts funktioniert.

Unten ist der Code-Schnipsel und here is live example at runnable.com

//This is OK 
getHeaders('http://google.com/404pag-that-does-not-exit'); 


//Here is the error. 
//Uncoughtable error! 
getHeaders('http://doesnotexistooooo.com'); 

function getHeaders(link){ 
    var _http = require("http"); 
    var myUrl = require("url"); 

    var qs=(myUrl.parse(link).search==null) ? "" : myUrl.parse(link).search ; 
    var path=myUrl.parse(link).pathname; 

    var options = { 
     hostname: myUrl.parse(link).hostname, 
     path: path+qs, 
     method: 'HEAD' 
    }; 
    _http.get(options, function(res) { 
     res.on('error',function(e){ 
      console.log("Error: " + myUrl.parse(link).hostname + "\n" + e.message); 
      console.log(e.stack); 
     }); 
     console.log('STATUS: ' + res.statusCode); 
     console.log('HEADERS: ' + JSON.stringify(res.headers)); 
    }); 

} 
+1

Check out [domains] (http://nodejs.org/api/domain .html). – Jason

Antwort

19

Sie müssen nur das error Ereignis behandeln, wie es in der Fehlermeldung angegeben. Nach the documentation:

If any error is encountered during the request (be that with DNS resolution, TCP level errors, or actual HTTP parse errors) an 'error' event is emitted on the returned request object.

Hier ist ein Anwendungsbeispiel:

var getRequest = _http.get(options, function(res) { 
    // … 
}); 
getRequest.on('error', function (err) { 
    console.log(err); 
}); 

, die ergibt:

$ node test.js 
{ [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' } 
+0

kann mir die Lösung auch –

+0

nur hinzufügen, dass diese gleiche Technik auch mit dem NPM 'Anfrage'-Modul funktioniert. – maxko87

+0

Wird der Rest des Codes ausgeführt? – Tomas

Verwandte Themen