hostname
{string}options
{integer | Object}family
{integer} 记录的地址族。必须为4
、6
或0
。0
值表示返回 IPv4 和 IPv6 地址。默认值:0
。hints
{number} 一个或多个[受支持的getaddrinfo
标志][supportedgetaddrinfo
flags]。可以通过按位OR
运算它们的值来传递多个标志。all
{boolean} 当为true
时,则回调将会返回数组中所有已解析的地址。否则,返回单个地址。默认值:false
。verbatim
{boolean} 当为true
时,则回调按 DNS 解析器返回的顺序接收 IPv4 和 IPv6 地址。当为false
时,则 IPv4 地址放在 IPv6 地址之前。 默认值: 当前为false
(地址已重新排序)但预计在不久的将来会发生变化。新代码应使用{ verbatim: true }
。
callback
{Function}err
{Error}address
{string} IPv4 或 IPv6 地址的字符串表示形式。family
{integer}4
或6
,表示address
的地址族,如果地址不是 IPv4 或 IPv6 地址,则为0
。0
可能是操作系统使用的名称解析服务中的错误的指示符。
解析主机名(例如:'nodejs.cn'
)为第一个找到的 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()
之前请花些时间查询[实现的注意事项][Implementation considerations section]章节。
使用示例:
const dns = require('dns');
const options = {
family: 6,
hints: dns.ADDRCONFIG | dns.V4MAPPED,
};
dns.lookup('example.com', options, (err, address, family) =>
console.log('地址: %j 地址族: IPv%s', address, family));
// 地址: "2606:2800:220:1:248:1893:25c8:1946" 地址族: IPv6
// 当 options.all 为 true 时,则结果将会是一个数组。
options.all = true;
dns.lookup('example.com', options, (err, addresses) =>
console.log('地址: %j', addresses));
// 地址: [{"address":"2606:2800:220:1:248:1893:25c8:1946","family":6}]
如果调用此方法的 [util.promisify()
] 化的版本,并且 all
未设置为 true
,则它返回的 Promise 会返回一个具有 address
和 family
属性的对象。