Spec-Zone.ru › Node.js 24 LTS

DNS

Стабильность: 2 - Стабильный

Исходный код: lib/dns.js

Модуль node:dns позволяет выполнять разрешение имён. Например, с его помощью можно находить IP-адреса для имён хостов.

Несмотря на то что модуль назван в честь системы доменных имён (DNS), для поиска он не всегда использует протокол DNS. dns.lookup() использует средства операционной системы для разрешения имён. Для этого может не потребоваться сетевое взаимодействие. Чтобы разрешать имена так же, как и другие приложения в той же системе, используйте dns.lookup().

Модули JavaScript
import dns from 'node:dns';

dns.lookup('example.org', (err, address, family) => {
  console.log('address: %j family: IPv%s', address, family);
});
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
CommonJS
const dns = require('node:dns');

dns.lookup('example.org', (err, address, family) => {
  console.log('address: %j family: IPv%s', address, family);
});
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6

Все остальные функции модуля node:dns подключаются к настоящему DNS-серверу для разрешения имён. Они всегда используют сеть для отправки DNS-запросов. Эти функции не используют тот же набор файлов конфигурации, что и dns.lookup() (например, /etc/hosts). Используйте эти функции, чтобы всегда отправлять DNS-запросы, обходя другие средства разрешения имён.

Модули JavaScript
import dns from 'node:dns';

dns.resolve4('archive.org', (err, addresses) => {
  if (err) throw err;

  console.log(`addresses: ${JSON.stringify(addresses)}`);

  addresses.forEach((a) => {
    dns.reverse(a, (err, hostnames) => {
      if (err) {
        throw err;
      }
      console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);
    });
  });
});
CommonJS
const dns = require('node:dns');

dns.resolve4('archive.org', (err, addresses) => {
  if (err) throw err;

  console.log(`addresses: ${JSON.stringify(addresses)}`);

  addresses.forEach((a) => {
    dns.reverse(a, (err, hostnames) => {
      if (err) {
        throw err;
      }
      console.log(`reverse for ${a}: ${JSON.stringify(hostnames)}`);
    });
  });
});

Дополнительные сведения см. в разделе «Особенности реализации».

Класс: dns.Resolver

Добавлено в: v8.3.0

Независимый резолвер для DNS-запросов.

При создании нового резолвера используются настройки сервера по умолчанию. Изменение серверов, используемых резолвером, с помощью resolver.setServers() не влияет на другие резолверы:

Модули JavaScript
import { Resolver } from 'node:dns';
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);

// This request will use the server at 4.4.4.4, independent of global settings.
resolver.resolve4('example.org', (err, addresses) => {
  // ...
});
CommonJS
const { Resolver } = require('node:dns');
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);

// This request will use the server at 4.4.4.4, independent of global settings.
resolver.resolve4('example.org', (err, addresses) => {
  // ...
});

Доступны следующие методы из модуля node:dns:

  • resolver.getServers()
  • resolver.resolve()
  • resolver.resolve4()
  • resolver.resolve6()
  • resolver.resolveAny()
  • resolver.resolveCaa()
  • resolver.resolveCname()
  • resolver.resolveMx()
  • resolver.resolveNaptr()
  • resolver.resolveNs()
  • resolver.resolvePtr()
  • resolver.resolveSoa()
  • resolver.resolveSrv()
  • resolver.resolveTlsa()
  • resolver.resolveTxt()
  • resolver.reverse()
  • resolver.setServers()

Resolver([options])

История
Версия Изменения
v16.7.0, v14.18.0

Объект options теперь принимает параметр tries.

v12.18.3

Конструктор теперь принимает объект options. Единственный поддерживаемый параметр — timeout.

v8.3.0

Добавлено в: v8.3.0

Создаёт новый резолвер.

  • options <Object>
    • timeout <integer> Тайм-аут запроса в миллисекундах или -1 для использования тайм-аута по умолчанию.
    • tries <integer> Количество попыток связаться с каждым сервером имён, после которого резолвер прекратит попытки. По умолчанию: 4
    • maxTimeout <integer> Максимальный тайм-аут повтора в миллисекундах. По умолчанию: 0, отключён.

resolver.cancel()

Добавлено в: v8.3.0

Отменяет все незавершённые DNS-запросы, отправленные этим резолвером. Соответствующие обратные вызовы будут вызваны с ошибкой с кодом ECANCELLED.

resolver.setLocalAddress([ipv4][, ipv6])

Добавлено в: v15.1.0, v14.17.0
  • ipv4 <string> Строковое представление адреса IPv4. По умолчанию: '0.0.0.0'
  • ipv6 <string> Строковое представление адреса IPv6. По умолчанию: '::0'

Экземпляр резолвера будет отправлять запросы с указанного IP-адреса. Это позволяет программам задавать исходящие интерфейсы в системах с несколькими сетевыми интерфейсами.

Если адрес v4 или v6 не указан, используется значение по умолчанию, и операционная система автоматически выбирает локальный адрес.

Резолвер будет использовать локальный адрес v4 при отправке запросов DNS-серверам IPv4, а локальный адрес v6 — при отправке запросов DNS-серверам IPv6. rrtype запросов разрешения имён не влияет на используемый локальный адрес.

dns.getServers()

Добавлено в: v0.11.3
  • Возвращает: <string[]>

Возвращает массив строк с IP-адресами, отформатированными согласно RFC 5952, которые в данный момент настроены для разрешения DNS-имён. Если используется нестандартный порт, строка будет содержать его номер.

[
  '8.8.8.8',
  '2001:4860:4860::8888',
  '8.8.8.8:1053',
  '[2001:4860:4860::8888]:1053',
] copy

dns.lookup(hostname[, options], callback)

История
Версия Изменения
v22.1.0, v20.13.0

Параметр verbatim теперь объявлен устаревшим; вместо него следует использовать новый параметр order.

v18.4.0

Для совместимости с node:net при передаче объекта параметров параметр family может иметь значение 'IPv4' или 'IPv6'.

v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v17.0.0

Теперь для параметра verbatim по умолчанию используется значение true.

v8.5.0

Теперь поддерживается параметр verbatim.

v1.2.0

Теперь поддерживается параметр all.

v0.1.90

Добавлено в: v0.1.90

  • hostname <string>
  • options <integer> | <Object>
    • family <integer> | <string> Семейство записей. Должно быть 4, 6 или 0. Для обратной совместимости 'IPv4' и 'IPv6' интерпретируются соответственно как 4 и 6. Значение 0 указывает, что возвращается адрес IPv4 или IPv6. Если значение 0 используется с { all: true } (см. ниже), возвращается один или оба адреса IPv4 и IPv6 в зависимости от DNS-резолвера системы. По умолчанию: 0.
    • hints <number> Один или несколько поддерживаемых флагов getaddrinfo. Несколько флагов можно передать, объединив их значения побитовой операцией OR.
    • all <boolean> Если значение равно true, обратный вызов возвращает все разрешённые адреса в массиве. В противном случае возвращается один адрес. По умолчанию: false.
    • order <string> Если значение равно verbatim, разрешённые адреса возвращаются без сортировки. Если значение равно ipv4first, разрешённые адреса сортируются так, чтобы адреса IPv4 располагались перед адресами IPv6. Если значение равно ipv6first, разрешённые адреса сортируются так, чтобы адреса IPv6 располагались перед адресами IPv4. По умолчанию: verbatim (адреса не переупорядочиваются). Значение по умолчанию можно настроить с помощью dns.setDefaultResultOrder() или --dns-result-order.
    • verbatim <boolean> Если значение равно true, обратный вызов получает адреса IPv4 и IPv6 в том порядке, в котором их вернул DNS-резолвер. Если значение равно false, адреса IPv4 располагаются перед адресами IPv6. Этот параметр будет объявлен устаревшим в пользу order. Если указаны оба параметра, order имеет более высокий приоритет. В новом коде следует использовать только order. По умолчанию: true (адреса не переупорядочиваются). Значение по умолчанию можно настроить с помощью dns.setDefaultResultOrder() или --dns-result-order.
  • callback <Function>
    • err <Error>
    • address <string> Строковое представление адреса IPv4 или IPv6.
    • family <integer> 4 или 6, обозначающее семейство address, либо 0, если адрес не является адресом IPv4 или IPv6. 0, вероятно, указывает на ошибку в службе разрешения имён, используемой операционной системой.

Разрешает имя хоста (например, 'nodejs.org') в первую найденную запись A (IPv4) или AAAA (IPv6). Все свойства option необязательны. Если options — целое число, оно должно быть 4 или 6; если options не указан, возвращаются найденные адреса IPv4, IPv6 или оба типа адресов.

Если для параметра all задано значение true, аргументы для callback изменяются на (err, addresses), где addresses — массив объектов со свойствами address и family.

В случае ошибки err является объектом Error, а err.code содержит код ошибки. Следует учитывать, что err.code будет равно 'ENOTFOUND' не только если имя хоста не существует, но и при других ошибках поиска, например при отсутствии доступных файловых дескрипторов.

dns.lookup() не обязательно имеет отношение к протоколу DNS. Реализация использует средство операционной системы, которое может сопоставлять имена с адресами и наоборот. Такая реализация может иметь неочевидные, но важные последствия для поведения любой программы Node.js. Прежде чем использовать dns.lookup(), ознакомьтесь с разделом «Особенности реализации».

Пример использования:

Модули JavaScript
import dns from 'node:dns';
const options = {
  family: 6,
  hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dns.lookup('example.org', options, (err, address, family) =>
  console.log('address: %j family: IPv%s', address, family));
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6

// When options.all is true, the result will be an Array.
options.all = true;
dns.lookup('example.org', options, (err, addresses) =>
  console.log('addresses: %j', addresses));
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
CommonJS
const dns = require('node:dns');
const options = {
  family: 6,
  hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dns.lookup('example.org', options, (err, address, family) =>
  console.log('address: %j family: IPv%s', address, family));
// address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6

// When options.all is true, the result will be an Array.
options.all = true;
dns.lookup('example.org', options, (err, addresses) =>
  console.log('addresses: %j', addresses));
// addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]

Если этот метод вызван в своей версии с util.promisify() и для all не задано значение true, он возвращает Promise для Object со свойствами address и family.

Поддерживаемые флаги getaddrinfo

История
Версия Изменения
v13.13.0, v12.17.0

Добавлена поддержка флага dns.ALL.

Следующие флаги можно передавать в качестве подсказок в dns.lookup().

  • dns.ADDRCONFIG: ограничивает возвращаемые типы адресов типами нелокальных адресов, настроенных в системе. Например, адреса IPv4 возвращаются только в том случае, если в текущей системе настроен хотя бы один адрес IPv4.
  • dns.V4MAPPED: если указано семейство IPv6, но адреса IPv6 не найдены, возвращает адреса IPv4, отображённые в IPv6. В некоторых операционных системах (например, FreeBSD 10.1) не поддерживается.
  • dns.ALL: если указан dns.V4MAPPED, возвращает разрешённые адреса IPv6, а также адреса IPv4, отображённые в IPv6.

dns.lookupService(address, port, callback)

История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.11.14

Добавлено в: v0.11.14

  • address <string>
  • port <number>
  • callback <Function>
    • err <Error>
    • hostname <string> например, example.com
    • service <string> например, http

Определяет имя хоста и службу для заданных значений address и port с помощью базовой реализации getnameinfo операционной системы.

Если address не является допустимым IP-адресом, будет выброшено исключение TypeError. Значение port будет преобразовано в число. Если оно не является допустимым номером порта, будет выброшено исключение TypeError.

В случае ошибки err является объектом Error, а err.code содержит код ошибки.

Модули JavaScript
import dns from 'node:dns';
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
  console.log(hostname, service);
  // Prints: localhost ssh
});
CommonJS
const dns = require('node:dns');
dns.lookupService('127.0.0.1', 22, (err, hostname, service) => {
  console.log(hostname, service);
  // Prints: localhost ssh
});

Если этот метод вызван в своей версии с util.promisify(), он возвращает Promise для Object со свойствами hostname и service.

dns.resolve(hostname[, rrtype], callback)

История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.1.27

Добавлено в: v0.1.27

  • hostname <string> Имя хоста для разрешения.
  • rrtype <string> Тип ресурсной записи. По умолчанию: 'A'.
  • callback <Function>
    • err <Error>
    • records <string[]> | <Object[]> | <Object>

Использует протокол DNS для разрешения имени хоста (например, 'nodejs.org') в массив ресурсных записей. Функция callback принимает аргументы (err, records). В случае успеха records будет массивом ресурсных записей. Тип и структура отдельных результатов зависят от значения rrtype:

rrtype records содержит Тип результата Сокращённый метод
'A' адреса IPv4 (по умолчанию) <string> dns.resolve4()
'AAAA' адреса IPv6 <string> dns.resolve6()
'ANY' любые записи <Object> dns.resolveAny()
'CAA' записи авторизации центра сертификации (CA) <Object> dns.resolveCaa()
'CNAME' записи канонических имён <string> dns.resolveCname()
'MX' записи почтового обмена <Object> dns.resolveMx()
'NAPTR' записи указателя полномочий имён <Object> dns.resolveNaptr()
'NS' записи серверов имён <string> dns.resolveNs()
'PTR' записи указателей <string> dns.resolvePtr()
'SOA' записи начала зоны полномочий <Object> dns.resolveSoa()
'SRV' записи служб <Object> dns.resolveSrv()
'TLSA' ассоциации сертификатов <Object> dns.resolveTlsa()
'TXT' текстовые записи <string[]> dns.resolveTxt()

В случае ошибки err является объектом Error, а err.code содержит один из кодов ошибок DNS.

dns.resolve4(hostname[, options], callback)

История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v7.2.0

Теперь этот метод поддерживает передачу options, а именно options.ttl.

v0.1.16

Добавлено в: v0.1.16

  • hostname <string> Имя хоста для разрешения.
  • options <Object>
    • ttl <boolean> Получает значение времени жизни (TTL) каждой записи. Если значение равно true, обратный вызов получает массив объектов { address: '1.2.3.4', ttl: 60 } вместо массива строк; значение TTL выражено в секундах.
  • callback <Function>
    • err <Error>
    • addresses <string[]> | <Object[]>

Использует протокол DNS для получения адресов IPv4 (записей A) для hostname. Аргумент addresses, переданный функции callback, будет содержать массив адресов IPv4 (например, ['74.125.79.104', '74.125.79.105', '74.125.79.106']).

dns.resolve6(hostname[, options], callback)

История
Версия Изменения
v18.0.0

Передача недопустимого обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v7.2.0

Теперь этот метод поддерживает передачу options, а именно options.ttl.

v0.1.16

Добавлено в: v0.1.16

  • hostname <string> Имя хоста для разрешения.
  • options <Object>
    • ttl <boolean> Получает значение времени жизни (TTL) каждой записи. Если значение равно true, обратный вызов получает массив объектов { address: '0:1:2:3:4:5:6:7', ttl: 60 } вместо массива строк; значение TTL выражено в секундах.
  • callback <Function>
    • err <Error>
    • addresses <string[]> | <Object[]>

Использует протокол DNS для получения адресов IPv6 (записей AAAA) для hostname. Аргумент addresses, переданный функции callback, будет содержать массив адресов IPv6.

dns.resolveAny(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

  • hostname <string>
  • callback <Function>
    • err <Error>
    • ret <Object[]>

Использует протокол DNS для поиска всех записей (также известных как запрос ANY или *). Аргумент ret, передаваемый функции callback, представляет собой массив, содержащий записи различных типов. У каждого объекта есть свойство type, указывающее тип текущей записи. В зависимости от type объект будет содержать дополнительные свойства:

Тип Свойства
'A' address/ttl
'AAAA' address/ttl
'CAA' См. dns.resolveCaa()
'CNAME' value
'MX' См. dns.resolveMx()
'NAPTR' См. dns.resolveNaptr()
'NS' value
'PTR' value
'SOA' См. dns.resolveSoa()
'SRV' См. dns.resolveSrv()
'TLSA' См. dns.resolveTlsa()
'TXT' Этот тип записи содержит свойство-массив с именем entries, которое относится к dns.resolveTxt(), например { entries: ['...'], type: 'TXT' }

Пример объекта ret, передаваемого функции обратного вызова:

[ { type: 'A', address: '127.0.0.1', ttl: 299 },
  { type: 'CNAME', value: 'example.com' },
  { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
  { type: 'NS', value: 'ns1.example.com' },
  { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
  { type: 'SOA',
    nsname: 'ns1.example.com',
    hostmaster: 'admin.example.com',
    serial: 156696742,
    refresh: 900,
    retry: 900,
    expire: 1800,
    minttl: 60 } ] copy

Операторы DNS-серверов могут отказаться отвечать на запросы ANY. Возможно, лучше вызывать отдельные методы, такие как dns.resolve4(), dns.resolveMx() и так далее. Дополнительные сведения см. в документе RFC 8482.

dns.resolveCname(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.3.2

Добавлено в версии: v0.3.2

  • hostname <string>
  • callback <Function>
    • err <Error>
    • addresses <string[]>

Использует протокол DNS для поиска записей CNAME для hostname. Аргумент addresses, передаваемый функции callback, будет содержать массив записей канонических имен, доступных для hostname (например, ['bar.example.com']).

dns.resolveCaa(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v15.0.0, v14.17.0

Добавлено в версиях: v15.0.0, v14.17.0

  • hostname <string>
  • callback <Function>
    • err <Error>
    • records <Object[]>

Использует протокол DNS для поиска записей CAA для hostname. Аргумент addresses, передаваемый функции callback, будет содержать массив записей авторизации центра сертификации, доступных для hostname (например, [{critical: 0, iodef: 'mailto:pki@example.com'}, {critical: 128, issue: 'pki.example.com'}]).

dns.resolveMx(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.1.27

Добавлено в версии: v0.1.27

  • hostname <string>
  • callback <Function>
    • err <Error>
    • addresses <Object[]>

Использует протокол DNS для поиска записей обмена почтой (записей MX) для hostname. Аргумент addresses, передаваемый функции callback, будет содержать массив объектов со свойствами priority и exchange (например, [{priority: 10, exchange: 'mx.example.com'}, ...]).

dns.resolveNaptr(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.9.12

Добавлено в версии: v0.9.12

  • hostname <string>
  • callback <Function>
    • err <Error>
    • addresses <Object[]>

Использует протокол DNS для поиска записей на основе регулярных выражений (записей NAPTR) для hostname. Аргумент addresses, передаваемый функции callback, будет содержать массив объектов со следующими свойствами:

  • flags
  • service
  • regexp
  • replacement
  • order
  • preference
{
  flags: 's',
  service: 'SIP+D2U',
  regexp: '',
  replacement: '_sip._udp.example.com',
  order: 30,
  preference: 100
} copy

dns.resolveNs(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.1.90

Добавлено в версии: v0.1.90

  • hostname <string>
  • callback <Function>
    • err <Error>
    • addresses <string[]>

Использует протокол DNS для поиска записей серверов имен (записей NS) для hostname. Аргумент addresses, передаваемый функции callback, будет содержать массив записей серверов имен, доступных для hostname (например, ['ns1.example.com', 'ns2.example.com']).

dns.resolvePtr(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v6.0.0

Добавлено в версии: v6.0.0

  • hostname <string>
  • callback <Function>
    • err <Error>
    • addresses <string[]>

Использует протокол DNS для поиска записей указателей (записей PTR) для hostname. Аргумент addresses, передаваемый функции callback, будет представлять собой массив строк, содержащих записи ответа.

dns.resolveSoa(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.11.10

Добавлено в версии: v0.11.10

  • hostname <string>
  • callback <Function>
    • err <Error>
    • address <Object>

Использует протокол DNS для поиска записи начала зоны ответственности (записи SOA) для hostname. Аргумент address, передаваемый функции callback, будет представлять собой объект со следующими свойствами:

  • nsname
  • hostmaster
  • serial
  • refresh
  • retry
  • expire
  • minttl
{
  nsname: 'ns.example.com',
  hostmaster: 'root.example.com',
  serial: 2013101809,
  refresh: 10000,
  retry: 2400,
  expire: 604800,
  minttl: 3600
} copy

dns.resolveSrv(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.1.27

Добавлено в версии: v0.1.27

  • hostname <string>
  • callback <Function>
    • err <Error>
    • addresses <Object[]>

Использует протокол DNS для поиска записей служб (записей SRV) для hostname. Аргумент addresses, передаваемый функции callback, будет содержать массив объектов со следующими свойствами:

  • priority
  • weight
  • port
  • name
{
  priority: 10,
  weight: 5,
  port: 21223,
  name: 'service.example.com'
} copy

dns.resolveTlsa(hostname, callback)

Добавлено в версиях: v23.9.0, v22.15.0
  • hostname <string>
  • callback <Function>
    • err <Error>
    • records <Object[]>

Использует протокол DNS для поиска записей связей сертификатов (записей TLSA) для hostname. Аргумент records, передаваемый функции callback, представляет собой массив объектов со следующими свойствами:

  • certUsage
  • selector
  • match
  • data
{
  certUsage: 3,
  selector: 1,
  match: 1,
  data: [ArrayBuffer]
} copy

dns.resolveTxt(hostname, callback)

История
Версия Изменения
v18.0.0

Передача недопустимой функции обратного вызова в аргумент callback теперь вызывает исключение ERR_INVALID_ARG_TYPE вместо ERR_INVALID_CALLBACK.

v0.1.27

Добавлено в версии: v0.1.27

  • hostname <string>
  • callback <Function>
    • err <Error>
    • records <string[]>

Использует протокол DNS для выполнения текстовых запросов (записей TXT) для hostname. Аргумент records, передаваемый функции callback, представляет собой двумерный массив текстовых записей, доступных для hostname (например, [ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]). Каждый вложенный массив содержит фрагменты TXT одной записи. В зависимости от сценария использования их можно объединить или обрабатывать отдельно.

dns.reverse(ip, callback)

Добавлено в версии: v0.1.16
  • ip <string>
  • callback <Function>
    • err <Error>
    • hostnames <string[]>

Выполняет обратный DNS-запрос, преобразующий адрес IPv4 или IPv6 в массив имен узлов.

В случае ошибки err является объектом Error, где err.code — один из кодов ошибок DNS.

dns.setDefaultResultOrder(order)

История
Версия Изменения
v22.1.0, v20.13.0

Теперь поддерживается значение ipv6first.

v17.0.0

Значение по умолчанию изменено на verbatim.

v16.4.0, v14.18.0

Добавлено в версиях: v16.4.0, v14.18.0

  • order <string> должно быть равно 'ipv4first', 'ipv6first' или 'verbatim'.

Задает значение по умолчанию для order в dns.lookup() и dnsPromises.lookup(). Возможные значения:

  • ipv4first: задает значение order по умолчанию равным ipv4first.
  • ipv6first: задает значение order по умолчанию равным ipv6first.
  • verbatim: задает значение order по умолчанию равным verbatim.

По умолчанию используется verbatim. Метод dns.setDefaultResultOrder() имеет более высокий приоритет, чем --dns-result-order. При использовании рабочих потоков вызов dns.setDefaultResultOrder() в основном потоке не повлияет на порядок DNS по умолчанию в рабочих потоках.

dns.getDefaultResultOrder()

История
Версия Изменения
v22.1.0, v20.13.0

Теперь поддерживается значение ipv6first.

v20.1.0, v18.17.0

Добавлено в версиях: v20.1.0, v18.17.0

Возвращает значение по умолчанию для order в dns.lookup() и dnsPromises.lookup(). Возможные значения:

  • ipv4first: если по умолчанию для order используется ipv4first.
  • ipv6first: если по умолчанию для order используется ipv6first.
  • verbatim: если по умолчанию для order используется verbatim.

dns.setServers(servers)

Добавлено в версии: v0.11.3
  • servers <string[]> массив адресов в формате RFC 5952

Задает IP-адреса и порты серверов, используемых при разрешении DNS-имен. Аргумент servers представляет собой массив адресов в формате RFC 5952. Если используется порт DNS по умолчанию, установленный IANA (53), его можно не указывать.

dns.setServers([
  '8.8.8.8',
  '[2001:4860:4860::8888]',
  '8.8.8.8:1053',
  '[2001:4860:4860::8888]:1053',
]); copy

Если указан недопустимый адрес, будет вызвано исключение.

Метод dns.setServers() нельзя вызывать во время выполнения DNS-запроса.

Метод dns.setServers() влияет только на dns.resolve(), dns.resolve*() и dns.reverse() (и, в частности, не влияет на dns.lookup()).

Этот метод работает аналогично resolve.conf. То есть если попытка разрешения с использованием первого указанного сервера приводит к ошибке NOTFOUND, метод resolve() не будет пытаться выполнить разрешение с использованием следующих указанных серверов. Резервные DNS-серверы используются только в том случае, если предыдущие серверы не отвечают вовремя или возникает другая ошибка.

API DNS с promises

История
Версия Изменения
v15.0.0

Предоставляется как require('dns/promises').

v11.14.0, v10.17.0

Этот API больше не является экспериментальным.

v10.6.0

Добавлено в: v10.6.0

API dns.promises предоставляет альтернативный набор асинхронных методов DNS, возвращающих объекты Promise вместо использования обратных вызовов. Доступ к API можно получить через require('node:dns').promises или require('node:dns/promises').

Класс: dnsPromises.Resolver

Добавлено в: v10.6.0

Независимый резолвер для DNS-запросов.

При создании нового резолвера используются настройки сервера по умолчанию. Настройка серверов для резолвера с помощью resolver.setServers() не влияет на другие резолверы:

Модули JavaScript
import { Resolver } from 'node:dns/promises';
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);

// This request will use the server at 4.4.4.4, independent of global settings.
const addresses = await resolver.resolve4('example.org');
CommonJS
const { Resolver } = require('node:dns').promises;
const resolver = new Resolver();
resolver.setServers(['4.4.4.4']);

// This request will use the server at 4.4.4.4, independent of global settings.
resolver.resolve4('example.org').then((addresses) => {
  // ...
});

// Alternatively, the same code can be written using async-await style.
(async function() {
  const addresses = await resolver.resolve4('example.org');
})();

Доступны следующие методы из API dnsPromises:

  • resolver.getServers()
  • resolver.resolve()
  • resolver.resolve4()
  • resolver.resolve6()
  • resolver.resolveAny()
  • resolver.resolveCaa()
  • resolver.resolveCname()
  • resolver.resolveMx()
  • resolver.resolveNaptr()
  • resolver.resolveNs()
  • resolver.resolvePtr()
  • resolver.resolveSoa()
  • resolver.resolveSrv()
  • resolver.resolveTlsa()
  • resolver.resolveTxt()
  • resolver.reverse()
  • resolver.setServers()

resolver.cancel()

Добавлено в: v15.3.0, v14.17.0

Отменяет все незавершённые DNS-запросы, выполненные этим резолвером. Соответствующие promises будут отклонены с ошибкой с кодом ECANCELLED.

dnsPromises.getServers()

Добавлено в: v10.6.0
  • Возвращает: <string[]>

Возвращает массив строк с IP-адресами, отформатированных согласно RFC 5952, которые в данный момент настроены для разрешения DNS-имён. Если используется пользовательский порт, строка будет включать его номер.

[
  '8.8.8.8',
  '2001:4860:4860::8888',
  '8.8.8.8:1053',
  '[2001:4860:4860::8888]:1053',
] copy

dnsPromises.lookup(hostname[, options])

История
Версия Изменения
v22.1.0, v20.13.0

Параметр verbatim теперь устарел; вместо него следует использовать новый параметр order.

v10.6.0

Добавлено в: v10.6.0

  • hostname <string>
  • options <integer> | <Object>
    • family <integer> Семейство записей. Должно иметь значение 4, 6 или 0. Значение 0 указывает, что возвращается IPv4- или IPv6-адрес. Если значение 0 используется с { all: true } (см. ниже), возвращается один или оба типа адресов — IPv4 и IPv6, в зависимости от DNS-резолвера системы. По умолчанию: 0.
    • hints <number> Один или несколько поддерживаемых флагов getaddrinfo. Несколько флагов можно передать, объединив их значения побитовой операцией OR.
    • all <boolean> Если значение true, разрешение Promise возвращает массив со всеми адресами. В противном случае возвращается один адрес. По умолчанию: false.
    • order <string> Если значение verbatim, разрешение Promise возвращает IPv4- и IPv6-адреса в том порядке, в котором их вернул DNS-резолвер. Если значение ipv4first, IPv4-адреса располагаются перед IPv6-адресами. Если значение ipv6first, IPv6-адреса располагаются перед IPv4-адресами. По умолчанию: verbatim (адреса не меняют порядок). Значение по умолчанию можно настроить с помощью dns.setDefaultResultOrder() или --dns-result-order. В новом коде следует использовать { order: 'verbatim' }.
    • verbatim <boolean> Если значение true, разрешение Promise возвращает IPv4- и IPv6-адреса в том порядке, в котором их вернул DNS-резолвер. Если значение false, IPv4-адреса располагаются перед IPv6-адресами. Этот параметр устареет; вместо него следует использовать order. Если заданы оба параметра, order имеет более высокий приоритет. В новом коде следует использовать только order. По умолчанию: в настоящее время false (порядок адресов меняется), однако ожидается, что в обозримом будущем значение изменится. Значение по умолчанию можно настроить с помощью dns.setDefaultResultOrder() или --dns-result-order.

Преобразует имя хоста (например, 'nodejs.org') в первую найденную запись A (IPv4) или AAAA (IPv6). Все свойства option необязательны. Если options является целым числом, оно должно быть равно 4 или 6. Если options не указан, возвращаются IPv4- или IPv6-адреса либо оба типа адресов, если они найдены.

Если для параметра all задано значение true, разрешение Promise возвращает addresses в виде массива объектов со свойствами address и family.

В случае ошибки Promise отклоняется с объектом Error, где err.code — это код ошибки. Обратите внимание, что err.code будет иметь значение 'ENOTFOUND' не только в том случае, если имя хоста не существует, но и при других сбоях поиска, например при отсутствии доступных файловых дескрипторов.

dnsPromises.lookup() не обязательно связан с протоколом DNS. Реализация использует средства операционной системы, которые могут сопоставлять имена с адресами и наоборот. Эта особенность реализации может иметь тонкие, но важные последствия для поведения любой программы Node.js. Перед использованием dnsPromises.lookup() ознакомьтесь с разделом Особенности реализации.

Пример использования:

Модули JavaScript
import dns from 'node:dns';
const dnsPromises = dns.promises;
const options = {
  family: 6,
  hints: dns.ADDRCONFIG | dns.V4MAPPED,
};

await dnsPromises.lookup('example.org', options).then((result) => {
  console.log('address: %j family: IPv%s', result.address, result.family);
  // address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
});

// When options.all is true, the result will be an Array.
options.all = true;
await dnsPromises.lookup('example.org', options).then((result) => {
  console.log('addresses: %j', result);
  // addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
});
CommonJS
const dns = require('node:dns');
const dnsPromises = dns.promises;
const options = {
  family: 6,
  hints: dns.ADDRCONFIG | dns.V4MAPPED,
};

dnsPromises.lookup('example.org', options).then((result) => {
  console.log('address: %j family: IPv%s', result.address, result.family);
  // address: "2606:2800:21f:cb07:6820:80da:af6b:8b2c" family: IPv6
});

// When options.all is true, the result will be an Array.
options.all = true;
dnsPromises.lookup('example.org', options).then((result) => {
  console.log('addresses: %j', result);
  // addresses: [{"address":"2606:2800:21f:cb07:6820:80da:af6b:8b2c","family":6}]
});

dnsPromises.lookupService(address, port)

Добавлено в: v10.6.0
  • address <string>
  • port <number>

Преобразует указанные address и port в имя хоста и службу с помощью базовой реализации getnameinfo операционной системы.

Если address не является допустимым IP-адресом, будет выброшено исключение TypeError. Значение port будет преобразовано в число. Если оно не является допустимым номером порта, будет выброшено исключение TypeError.

В случае ошибки Promise отклоняется с объектом Error, где err.code — это код ошибки.

Модули JavaScript
import dnsPromises from 'node:dns/promises';
const result = await dnsPromises.lookupService('127.0.0.1', 22);

console.log(result.hostname, result.service); // Prints: localhost ssh
CommonJS
const dnsPromises = require('node:dns').promises;
dnsPromises.lookupService('127.0.0.1', 22).then((result) => {
  console.log(result.hostname, result.service);
  // Prints: localhost ssh
});

dnsPromises.resolve(hostname[, rrtype])

Добавлено в: v10.6.0
  • hostname <string> Имя хоста для разрешения.
  • rrtype <string> Тип ресурсной записи. По умолчанию: 'A'.

Использует протокол DNS для преобразования имени хоста (например, 'nodejs.org') в массив ресурсных записей. В случае успеха Promise разрешается массивом ресурсных записей. Тип и структура отдельных результатов зависят от rrtype:

rrtype Содержимое records Тип результата Сокращённый метод
'A' IPv4-адреса (по умолчанию) <string> dnsPromises.resolve4()
'AAAA' IPv6-адреса <string> dnsPromises.resolve6()
'ANY' любые записи <Object> dnsPromises.resolveAny()
'CAA' записи авторизации центра сертификации <Object> dnsPromises.resolveCaa()
'CNAME' записи канонического имени <string> dnsPromises.resolveCname()
'MX' записи почтового обмена <Object> dnsPromises.resolveMx()
'NAPTR' записи указателя полномочий имени <Object> dnsPromises.resolveNaptr()
'NS' записи серверов имён <string> dnsPromises.resolveNs()
'PTR' записи указателей <string> dnsPromises.resolvePtr()
'SOA' записи начала зоны полномочий <Object> dnsPromises.resolveSoa()
'SRV' записи служб <Object> dnsPromises.resolveSrv()
'TLSA' связи сертификатов <Object> dnsPromises.resolveTlsa()
'TXT' текстовые записи <string[]> dnsPromises.resolveTxt()

В случае ошибки Promise отклоняется с объектом Error, где err.code — один из кодов ошибок DNS.

dnsPromises.resolve4(hostname[, options])

Добавлено в: v10.6.0
  • hostname <string> Имя хоста для разрешения.
  • options <Object>
    • ttl <boolean> Получать значение времени жизни (TTL) каждой записи. Если значение true, Promise разрешается массивом объектов { address: '1.2.3.4', ttl: 60 } вместо массива строк; значение TTL указывается в секундах.

Использует протокол DNS для разрешения IPv4-адресов (записей A) для hostname. В случае успеха Promise разрешается массивом IPv4-адресов (например, ['74.125.79.104', '74.125.79.105', '74.125.79.106']).

dnsPromises.resolve6(hostname[, options])

Добавлено в: v10.6.0
  • hostname <string> Имя хоста для разрешения.
  • options <Object>
    • ttl <boolean> Получать значение времени жизни (TTL) каждой записи. Если значение true, Promise разрешается массивом объектов { address: '0:1:2:3:4:5:6:7', ttl: 60 } вместо массива строк; значение TTL указывается в секундах.

Использует протокол DNS для разрешения IPv6-адресов (записей AAAA) для hostname. В случае успеха Promise разрешается массивом IPv6-адресов.

dnsPromises.resolveAny(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения всех записей (также называемый запросом ANY или *). В случае успеха Promise разрешается массивом, содержащим записи разных типов. Каждый объект имеет свойство type, указывающее тип текущей записи. В зависимости от type объект также будет содержать дополнительные свойства:

Тип Свойства
'A' address/ttl
'AAAA' address/ttl
'CAA' См. dnsPromises.resolveCaa()
'CNAME' value
'MX' См. dnsPromises.resolveMx()
'NAPTR' См. dnsPromises.resolveNaptr()
'NS' value
'PTR' value
'SOA' См. dnsPromises.resolveSoa()
'SRV' См. dnsPromises.resolveSrv()
'TLSA' См. dnsPromises.resolveTlsa()
'TXT' Запись этого типа содержит свойство-массив с именем entries, которое соответствует dnsPromises.resolveTxt(), например { entries: ['...'], type: 'TXT' }

Пример объекта результата:

[ { type: 'A', address: '127.0.0.1', ttl: 299 },
  { type: 'CNAME', value: 'example.com' },
  { type: 'MX', exchange: 'alt4.aspmx.l.example.com', priority: 50 },
  { type: 'NS', value: 'ns1.example.com' },
  { type: 'TXT', entries: [ 'v=spf1 include:_spf.example.com ~all' ] },
  { type: 'SOA',
    nsname: 'ns1.example.com',
    hostmaster: 'admin.example.com',
    serial: 156696742,
    refresh: 900,
    retry: 900,
    expire: 1800,
    minttl: 60 } ] copy

dnsPromises.resolveCaa(hostname)

Добавлено в: v15.0.0, v14.17.0
  • hostname <string>

Использует протокол DNS для разрешения записей CAA для hostname. В случае успеха Promise разрешается массивом объектов с доступными записями авторизации центра сертификации для hostname (например, [{critical: 0, iodef: 'mailto:pki@example.com'},{critical: 128, issue: 'pki.example.com'}]).

dnsPromises.resolveCname(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения записей CNAME для hostname. В случае успеха Promise разрешается массивом доступных записей канонического имени для hostname (например, ['bar.example.com']).

dnsPromises.resolveMx(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения записей почтового обмена (записей MX) для hostname. В случае успеха Promise разрешается массивом объектов, содержащих свойства priority и exchange (например, [{priority: 10, exchange: 'mx.example.com'}, ...]).

dnsPromises.resolveNaptr(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения записей на основе регулярных выражений (записей NAPTR) для hostname. В случае успеха Promise разрешается массивом объектов со следующими свойствами:

  • flags
  • service
  • regexp
  • replacement
  • order
  • preference
{
  flags: 's',
  service: 'SIP+D2U',
  regexp: '',
  replacement: '_sip._udp.example.com',
  order: 30,
  preference: 100
} copy

dnsPromises.resolveNs(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения записей серверов имён (записей NS) для hostname. В случае успеха Promise разрешается массивом доступных записей серверов имён для hostname (например, ['ns1.example.com', 'ns2.example.com']).

dnsPromises.resolvePtr(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения записей указателей (записей PTR) для hostname. В случае успеха Promise разрешается массивом строк с записями ответа.

dnsPromises.resolveSoa(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения записи начала зоны полномочий (записи SOA) для hostname. В случае успеха Promise разрешается объектом со следующими свойствами:

  • nsname
  • hostmaster
  • serial
  • refresh
  • retry
  • expire
  • minttl
{
  nsname: 'ns.example.com',
  hostmaster: 'root.example.com',
  serial: 2013101809,
  refresh: 10000,
  retry: 2400,
  expire: 604800,
  minttl: 3600
} copy

dnsPromises.resolveSrv(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения записей служб (записей SRV) для hostname. В случае успеха Promise разрешается массивом объектов со следующими свойствами:

  • priority
  • weight
  • port
  • name
{
  priority: 10,
  weight: 5,
  port: 21223,
  name: 'service.example.com'
} copy

dnsPromises.resolveTlsa(hostname)

Добавлено в: v23.9.0, v22.15.0
  • hostname <string>

Использует протокол DNS для разрешения связей сертификатов (записей TLSA) для hostname. В случае успеха Promise разрешается массивом объектов со следующими свойствами:

  • certUsage
  • selector
  • match
  • data
{
  certUsage: 3,
  selector: 1,
  match: 1,
  data: [ArrayBuffer]
} copy

dnsPromises.resolveTxt(hostname)

Добавлено в: v10.6.0
  • hostname <string>

Использует протокол DNS для разрешения текстовых запросов (записей TXT) для hostname. В случае успеха Promise разрешается двумерным массивом текстовых записей, доступных для hostname (например, [ ['v=spf1 ip4:0.0.0.0 ', '~all' ] ]). Каждый вложенный массив содержит фрагменты TXT одной записи. В зависимости от задачи их можно объединить или обрабатывать отдельно.

dnsPromises.reverse(ip)

Добавлено в: v10.6.0
  • ip <string>

Выполняет обратный DNS-запрос, преобразующий IPv4- или IPv6-адрес в массив имён хостов.

В случае ошибки Promise отклоняется с объектом Error, где err.code — один из кодов ошибок DNS.

dnsPromises.setDefaultResultOrder(order)

История
Версия Изменения
v22.1.0, v20.13.0

Теперь поддерживается значение ipv6first.

v17.0.0

Значение по умолчанию изменено на verbatim.

v16.4.0, v14.18.0

Добавлено в: v16.4.0, v14.18.0

  • order <string> должно иметь значение 'ipv4first', 'ipv6first' или 'verbatim'.

Задаёт значение по умолчанию для order в dns.lookup() и dnsPromises.lookup(). Возможные значения:

  • ipv4first: задаёт для order значение ipv4first.
  • ipv6first: задаёт для order значение ipv6first.
  • verbatim: задаёт для order значение verbatim.

По умолчанию используется значение verbatim. Методы dnsPromises.setDefaultResultOrder() имеют более высокий приоритет, чем --dns-result-order. При использовании рабочих потоков вызов dnsPromises.setDefaultResultOrder() в главном потоке не повлияет на порядок DNS по умолчанию в рабочих потоках.

dnsPromises.getDefaultResultOrder()

Добавлено в: v20.1.0, v18.17.0

Получает значение dnsOrder.

dnsPromises.setServers(servers)

Добавлено в: v10.6.0
  • servers <string[]> массив адресов в формате RFC 5952

Задает IP-адреса и порты серверов, используемых при разрешении DNS-имен. Аргумент servers представляет собой массив адресов в формате RFC 5952. Если используется порт DNS по умолчанию, установленный IANA (53), его можно не указывать.

dnsPromises.setServers([
  '8.8.8.8',
  '[2001:4860:4860::8888]',
  '8.8.8.8:1053',
  '[2001:4860:4860::8888]:1053',
]); copy

Если указан недопустимый адрес, будет выброшена ошибка.

Метод dnsPromises.setServers() нельзя вызывать во время выполнения DNS-запроса.

Этот метод работает во многом так же, как resolve.conf. То есть если попытка разрешения имени с помощью первого указанного сервера приводит к ошибке NOTFOUND, метод resolve() не будет пытаться выполнить разрешение с помощью следующих указанных серверов. Резервные DNS-серверы будут использоваться, только если предыдущие серверы не ответят вовремя или вернут другую ошибку.

Коды ошибок

Для каждого DNS-запроса может быть возвращен один из следующих кодов ошибок:

  • dns.NODATA: DNS-сервер вернул ответ без данных.
  • dns.FORMERR: DNS-сервер сообщает, что запрос имеет неверный формат.
  • dns.SERVFAIL: DNS-сервер вернул общую ошибку.
  • dns.NOTFOUND: Доменное имя не найдено.
  • dns.NOTIMP: DNS-сервер не поддерживает запрошенную операцию.
  • dns.REFUSED: DNS-сервер отклонил запрос.
  • dns.BADQUERY: DNS-запрос имеет неверный формат.
  • dns.BADNAME: Имя узла имеет неверный формат.
  • dns.BADFAMILY: Семейство адресов не поддерживается.
  • dns.BADRESP: Ответ DNS имеет неверный формат.
  • dns.CONNREFUSED: Не удалось связаться с DNS-серверами.
  • dns.TIMEOUT: Истекло время ожидания при обращении к DNS-серверам.
  • dns.EOF: Конец файла.
  • dns.FILE: Ошибка чтения файла.
  • dns.NOMEM: Недостаточно памяти.
  • dns.DESTRUCTION: Канал уничтожается.
  • dns.BADSTR: Строка имеет неверный формат.
  • dns.BADFLAGS: Указаны недопустимые флаги.
  • dns.NONAME: Указанное имя узла не является числовым.
  • dns.BADHINTS: Указаны недопустимые флаги подсказок.
  • dns.NOTINITIALIZED: Инициализация библиотеки c-ares еще не выполнена.
  • dns.LOADIPHLPAPI: Ошибка загрузки iphlpapi.dll.
  • dns.ADDRGETNETWORKPARAMS: Не удалось найти функцию GetNetworkParams.
  • dns.CANCELLED: DNS-запрос отменен.

API dnsPromises также экспортирует приведенные выше коды ошибок, например dnsPromises.NODATA.

Особенности реализации

Хотя dns.lookup() и различные функции dns.resolve*()/dns.reverse() предназначены для одной и той же цели — сопоставления сетевого имени с сетевым адресом (или наоборот), — их поведение существенно различается. Эти различия могут иметь неочевидные, но значительные последствия для поведения программ Node.js.

dns.lookup()

Внутри dns.lookup() использует те же средства операционной системы, что и большинство других программ. Например, dns.lookup() почти всегда разрешает заданное имя так же, как команда ping. В большинстве POSIX-подобных операционных систем поведение функции dns.lookup() можно изменить, изменив настройки в файлах nsswitch.conf(5) и/или resolv.conf(5), однако изменения этих файлов повлияют на поведение всех остальных программ, работающих в той же операционной системе.

Хотя с точки зрения JavaScript вызов dns.lookup() является асинхронным, он реализован как синхронный вызов getaddrinfo(3), выполняемый в пуле потоков libuv. Это может неожиданно отрицательно сказаться на производительности некоторых приложений. Дополнительные сведения см. в документации по UV_THREADPOOL_SIZE.

Различные сетевые API вызывают dns.lookup() внутри для разрешения имен узлов. Если это создает проблему, рассмотрите возможность разрешить имя узла в адрес с помощью dns.resolve() и использовать этот адрес вместо имени узла. Кроме того, некоторые сетевые API (например, socket.connect() и dgram.createSocket()) позволяют заменить используемый по умолчанию резолвер dns.lookup().

dns.resolve(), dns.resolve*() и dns.reverse()

Эти функции реализованы совершенно иначе, чем dns.lookup(). Они не используют getaddrinfo(3) и всегда выполняют DNS-запрос по сети. Такое сетевое взаимодействие всегда осуществляется асинхронно и не использует пул потоков libuv.

Поэтому эти функции не оказывают такого же негативного влияния на другие задачи, выполняемые в пуле потоков libuv, какое может оказывать dns.lookup().

Они не используют тот же набор файлов конфигурации, что и dns.lookup(). Например, они не используют настройки из /etc/hosts.

© Joyent, Inc. and other Node contributors
Licensed under the MIT License.
Node.js is a trademark of Joyent, Inc. and is used with its permission.
We are not endorsed by or affiliated with Joyent.
https://nodejs.org/dist/latest-v24.x/docs/api/dns.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API