Nodejs getaddrinfo enotfound异常,求解

Nodejs getaddrinfo enotfound异常,求解

在node里面发送http请求,抛出getaddrinfo enotfound异常是怎么一回事,求解答!!!

5 回复

当在Node.js中发送HTTP请求时,如果遇到getaddrinfo ENOTFOUND异常,通常是因为DNS解析失败。这意味着你的应用程序无法将域名解析为IP地址。这可能是由于多种原因造成的,比如网络问题、DNS服务器故障或者请求的域名不存在。

解决方法

  1. 检查域名是否正确:确保你请求的域名是正确的,并且可以正常访问。
  2. 检查网络连接:确保你的设备能够正常访问互联网。
  3. 使用IP地址代替域名:如果你确定域名解析有问题,可以尝试直接使用目标服务器的IP地址。
  4. 更换DNS服务器:有时,更换DNS服务器可以解决解析问题。你可以试试Google的公共DNS(8.8.8.8)或Cloudflare的DNS(1.1.1.1)。
  5. 增加超时时间:如果DNS解析需要较长时间,可以考虑增加超时时间。

示例代码

以下是一个简单的HTTP GET请求的例子,包括如何处理可能发生的错误:

const http = require('http');

const options = {
    hostname: 'example.com', // 确保这里的域名是正确的
    port: 80,
    path: '/',
    method: 'GET'
};

const req = http.request(options, (res) => {
    console.log(`STATUS: ${res.statusCode}`);
    res.on('data', (chunk) => {
        console.log(`BODY: ${chunk}`);
    });
    res.on('end', () => {
        console.log('No more data in response.');
    });
});

req.on('error', (e) => {
    console.error(`Problem with request: ${e.message}`);
});

// 如果需要,可以增加超时时间
req.setTimeout(10000, () => {
    console.error('Request timed out');
    req.abort();
});

req.end();

解释

  • hostname字段应设置为你想要请求的域名。
  • req.on('error', ...)事件处理器中,我们打印出任何可能发生的错误信息。
  • req.setTimeout用于设置请求的超时时间。如果请求超过设定的时间还没有完成,将会触发超时事件。

通过上述步骤和示例代码,你应该能够更好地理解和处理getaddrinfo ENOTFOUND异常。


3652次浏览??? 2年前的,还没有解决方案吗?

域名写错了 自豪地采用 CNodeJS ionic

墙贴留名 leapon 到此一游

当在 Node.js 中发送 HTTP 请求时遇到 getaddrinfo ENOTFOUND 异常,这通常意味着 DNS 解析失败。具体来说,你的代码尝试将一个主机名解析为 IP 地址,但该主机名无法被 DNS 服务器解析。

以下是一些可能的原因及解决方案:

  1. 拼写错误:检查你请求的 URL 中的主机名是否正确拼写。
  2. DNS 问题:可能由于网络配置或 DNS 设置的问题,导致 DNS 解析失败。
  3. 服务器未运行:确保你要连接的服务器正在运行并且可访问。
  4. 防火墙/安全组设置:检查是否有任何防火墙或安全组规则阻止了请求。

示例代码

const http = require('http');

const options = {
    hostname: 'example.com', // 确保这里填写正确的主机名
    port: 80,
    path: '/somepath',
    method: 'GET'
};

const req = http.request(options, (res) => {
    console.log(`STATUS: ${res.statusCode}`);
    res.on('data', (chunk) => {
        console.log(`BODY: ${chunk}`);
    });
    res.on('end', () => {
        console.log('No more data in response.');
    });
});

req.on('error', (e) => {
    console.error(`Problem with request: ${e.message}`);
});

req.end();

如果在运行上述代码时仍然遇到 getaddrinfo ENOTFOUND 异常,请检查:

  • 确保 hostname 拼写正确。
  • 检查你的网络连接,确认可以访问外网。
  • 尝试使用其他域名或 IP 地址进行测试。

调试技巧

  • 在命令行中尝试 ping example.comnslookup example.com 来检查 DNS 是否能正常解析。
  • 如果是在开发环境中,请检查本地 DNS 设置是否正确。

通过以上步骤,你应该能够找到并解决 getaddrinfo ENOTFOUND 异常。

回到顶部