检查URL是否会导致getaddrinfo错误

时间:2014-08-18 14:20:08

标签: node.js request

有没有办法在请求时检查任何给定的地址是否会导致getaddrinfo错误?我有URL列表,其中一些导致getaddrinfo错误并崩溃Node.js应用程序。所以我想在调用request方法之前检查地址是否可以解析。我一直试图在请求的回调函数内捕获该错误而没有任何运气。谢谢!

这是我的尝试 -     ref = this;

var options = {
    host: ref.host,
    headers: {
        'user-agent': 'Mozilla/5.0'      
    },
    path: ref.pathname,
    method: "GET",
    timeout: 5000,
    followRedirect: true,
    maxRedirects: 5
};  

// Process the file.
var file = fs.createWriteStream(path.normalize(ref.saveTo + ref.name + ref.extension));

var req = ref.protocol.get(options, function(res) {        
    res.on('data', function(data) {      
        f.write(data);
    }).on('end', function() {
        f.end();
    });
});

req.on('response', function(err) {
  if(err.statusCode == '404') { 
    console.log("Response ", err);
  }
}); 

req.on('error', function(err) {
  console.log("This is error ----" + err);
});
req.end();

编辑:这是我从Node.js得到的错误 -

错误:getaddrinfo ENOTFOUND     在errnoException(dns.js:37:11)     在Object.onanswer [as oncomplete](dns.js:124:16)

1 个答案:

答案 0 :(得分:0)

您可以在HTTP request上捕捉error事件。例如:

var doGETRequest = require("http").get;
var req = doGETRequest("http://foo.bar", function(res) {  });
req.on("error", function errorHandler(err) {
    if(err.code === "ENOTFOUND") {
        console.log("Address not found.", e);
    } else {
        console.log("Some other error:", e);
    }
});

使用事件而不是例外的原因是因为主机名查找是异步的。不知道为什么他们不会将它作为回调的第一个参数传递,但这只是事情的方式。