【发布时间】:2022-01-07 19:37:14
【问题描述】:
$ node
> const dns = require('dns');
> dns.resolveMx('nodejs.org', (err, value) => {
if(err) {
console.log(err);
return;
}
console.log(value);
})
> [
{ exchange: 'aspmx2.googlemail.com', priority: 30 },
{ exchange: 'aspmx3.googlemail.com', priority: 30 },
{ exchange: 'aspmx.l.google.com', priority: 10 },
{ exchange: 'alt1.aspmx.l.google.com', priority: 20 },
{ exchange: 'alt2.aspmx.l.google.com', priority: 20 }
]
> dns.resolveCname('nodejs.org', (err, value) => {
if(err) {
console.log(err);
return;
}
console.log(value);
})
> Error: queryCname ENODATA nodejs.org
at QueryReqWrap.onresolve [as oncomplete] (node:dns:213:19)
at QueryReqWrap.callbackTrampoline (node:internal/async_hooks:130:17) {
errno: undefined,
code: 'ENODATA',
syscall: 'queryCname',
hostname: 'nodejs.org'
}
为什么?
换句话说,为给定主机解析 CNAME 总是会抛出 ENODATA 错误。我在我的机器和 EC2 实例中对此进行了测试。我得到相同的结果。我在 EC2 实例中检查并打开了 DNS 端口。我仍然收到错误。
有人能解释一下吗?
【问题讨论】:
-
因为那些域没有设置 CNAME?
-
可能是,
nodejs.org不是。我还使用添加了 CNAME 记录的域进行了检查。我得到了同样的回应。 -
DNSNODATA 并不完全是一个错误,无论如何它是一个伪错误。它只是意味着您查询的名称存在(否则您会收到 NXDOMAIN 错误)但您想要的该名称的记录类型不存在。因此“没有数据”。根据 DNS 规则,您不能在顶点使用CNAME。