为什么NodeJS的"dns.resolve"参数是"localhost"就挂了?

Why "dns.resolve" of NodeJS hangs up when "localhost" is the parameter?

如果我使用dns.resolve()不当我能理解,但是挂断是一种奇怪的行为。如果我做错了什么,不应该 dns.resolve() 抛出错误吗?

const dns = require("dns").promises;

dns.resolve("localhost").
    then(
      domains => {
        console.log("===========");
        console.log(domains);
      }
    ).
    catch((error) => { console.error(error); });

我的 Node.js 版本是 16.13.0.

我认为这里有解释: https://nodejs.org/api/dns.html#dnsresolve-dnsresolve-and-dnsreverse

dns.resolve(), dns.resolve*() and dns.reverse() They do not use the same set of configuration files than what dns.lookup() uses. For instance, they do not use the configuration from /etc/hosts.

在我的 MacOS dns.resolve() 上正确 returns 127.0.0.1 当我使用默认 DNS 服务器时,当我使用 8.8.8.8 时它会抛出此错误但不会挂起:

Error: queryA ENOTFOUND localhost
    at QueryReqWrap.onresolve [as oncomplete] (internal/dns/promises.js:172:17) {
  errno: undefined,
  code: 'ENOTFOUND',
  syscall: 'queryA',
  hostname: 'localhost'
}

所以我猜问题是由您的系统配置引起的,这个 GitHub 问题包含更多信息: https://github.com/nodejs/help/issues/2163

正确使用 dns.lookup() returns 默认 127.0.0.1 和 8.8.8.8,试试看效果如何。