#node.js #dns
#node.js #dns
Вопрос:
$ node gt; const dns = require('dns'); gt; dns.resolveMx('nodejs.org', (err, value) =gt; { if(err) { console.log(err); return; } console.log(value); }) gt; [ { 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 } ] gt; dns.resolveCname('nodejs.org', (err, value) =gt; { if(err) { console.log(err); return; } console.log(value); }) gt; 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. Я получаю те же результаты. Я проверил и открыл DNS-порты в экземпляре EC2. У меня все еще есть ошибка.
Может ли кто-нибудь пролить свет на это?
Комментарии:
1. Потому что у этих доменов нет набора CNAME?
2. Может быть,
nodejs.org
и нет. Я также проверил, используя домен, в который я добавил запись CNAME. Я получил тот же ответ.3.
DNS
NODATA-это не совсем ошибка, и в любом случае это псевдо-ошибка. Это просто означает, что имя, которое вы запрашиваете, существует (в противном случае вы получили бы ошибку NXDOMAIN), но тип записи, который вы хотите для этого имени, не существует. Следовательно, «нет данных». И согласно правилам DNS, у вас не может бытьCNAME
at apex.
Ответ №1:
Мое понимание dns.resolveCname
API было неверным. Похоже, что разрешение происходит на данном уровне хоста.
Если я использую nodejs.org
разрешение Cname, оно всегда выдает ENODATA
ошибку. Но, если я использую docs.nodejs.org
для разрешения Cname, это дает [ 'nodejs.org' ]
.
Поэтому, если с данным именем хоста не связано какое-либо имя CNAME, dns.resolveCname
всегда выдает ENODATA
.
Комментарии:
1. «Если я использую nodejs.org для разрешения Cname это всегда приводит к ошибке ENODATA». У вас не может быть записи CNAME в apex для любой зоны. Это соответствует стандартному дизайну DNS.
2. @PatrickMevzek, вы хотите написать свои комментарии в качестве ответа? Я приму это.