2014-02-09 4 views
7

У меня есть список ссылок, которые мне нужно проверить перед обработкой некоторых данных. Проверка заголовков с http.get возвращает ошибку:Как поймать getaddrinfo ENOTFOUND

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

Я не могу справиться с этой ошибкой и выйти из процесса. Я попробовал res.on («error») и try..catch на http.get, но ничего не работает.

Ниже приведен фрагмент кода, и 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

ЗАКАНЧИВАТЬ [домены] (http://nodejs.org/api/domain .html). – Jason

ответ

19

Вам просто нужно обрабатывать error событие, как указано в сообщении об ошибке. В соответствии с 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.

Вот пример использования:

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

, который дает:

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

может сказать мне решение также –

+0

, просто добавив, что эта же технология также работает с модулем «запрос» NPM. – maxko87

+0

Будет ли это позволять остальной части кода работать? – Tomas

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

  • Нет связанных вопросов^_^