如何捕捉getaddrinfo ENOTFOUND

我有一个链接列表,我需要在处理一些数据之前检查。 用http.get检查标题返回错误:

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

我无法处理这个错误,并退出该过程。 我尝试res.on(“错误”)并尝试http.get上捕获,但没有任何工作。

下面是代码片段, 这里是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)); }); } 

您只需要处理error事件,如错误消息中所述。 根据文件 :

如果在请求过程中遇到任何错误(即使用DNSparsing,TCP级错误或实际的HTTPparsing错误),则会在返回的请求对象上发出“错误”事件。

这是一个用法示例:

 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' }