npm 模块函数拦截。特别是基本模块 'dns'

npm module function interception. specifically base module 'dns'

import DNS from 'dns'

DNS.resolveTxt('test-website.com', (err, addresses) => {
      console.log(err, addresses);
})

以上是节点如何解析网址的示例用法。我想为 'dns' 构建一个箭尾库并拦截处理程序。 (这将用于我为 Route53 创建的 AWS 箭尾库,因此这不是用于“测试”目的)。我看到一些有意义的 rewiremock 东西,但这似乎是一个测试模拟工具。无论如何要实现这种拦截?我不想只是在中间拦截它并转到原来的方法,而是想弄清楚如何替换整个处理程序本身。 *

澄清:我想直接使用 DNS.resolveTxt,我从响应中得到的 addresses 将是我的习惯。

澄清 #2:我想理想地 nock 整个 DNS 库。 resolveTxt 只是一个例子。

澄清 #3:我想在我的服务中全局模拟 DNS。不只是一次性使用。

澄清 #4(重要):我想我的问题是如何拦截对 DNS 的 tcp 请求。 sudo tcpdump host 1.1.1.1 显示当前从我的计算机调用的 DNS 服务器集。例如,如果我要 dns.setServer('1.2.3.4'),并执行 sudo tcpdump host 1.2.3.4,每次我调用 DNS.resolveTxt,我都能看到调用日志。知道如何拦截吗?

您可以实现自己的模仿 DNS.Resolver#lookup()

的查找函数

https://nodejs.org/docs/latest-v12.x/api/dns.html#dns_dns_lookup_hostname_options_callback

并将其在选项中传递给采用 TCP 连接选项的节点模块函数。

https://nodejs.org/docs/latest-v12.x/api/http.html#http_http_request_options_callback

https://nodejs.org/docs/latest-v12.x/api/net.html#net_socket_connect_options_connectlistener