【问题标题】:Check if URL would result in getaddrinfo error检查 URL 是否会导致 getaddrinfo 错误
【发布时间】:2014-10-11 12:01:31
【问题描述】:

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

这是我的尝试—— 参考 = 这个;

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)

【问题讨论】:

    标签: node.js request


    【解决方案1】:

    您可以在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);
        }
    });
    

    之所以使用事件而不是异常是因为主机名查找是异步的。不知道为什么他们不只是将它作为第一个参数传递给回调,但事情就是这样。

    【讨论】:

    • 我已经尝试过这种方法。出于某种原因,应用程序无论如何都会崩溃。我在帖子中添加了我的代码。
    • 我采用了您添加的示例,并在修复了一些缺失的变量后运行了它。错误处理程序会记录错误,但应用程序不会崩溃。您是否遇到未处理的异常?完整的错误是什么?您正在运行最新版本的节点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多