如何在不存在的主机上捕获node.js http错误?

时间:2011-12-28 13:59:02

标签: http node.js error-handling

当我尝试使用http模块访问不存在的主机时,如下所示:

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

但是我收到以下错误:

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)

我想抓住这个错误,所以我尝试了try / catch并设置了一堆请求属性的错误监听器,但是没有一个工作。我怎样才能发现错误?

2 个答案:

答案 0 :(得分:14)

看起来错误是从http.Client引发的,而不是请求。怎么样:

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

仅供参考,http.createClient已被弃用 - 以下内容应使用get方法:

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

答案 1 :(得分:-1)

您可以在运行代码之前尝试使用dns模块解析主机。

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