0

我想获取主机名 www.example.com 的 MX 记录。节点有它的功能。

dns.resolveMx(domain, callback)

但我不想要那个回调的东西。我想要同步呼叫之类的东西。例如

var records = dns.resolveMx(domain);

这可能吗 ?

(注意:- 我在 Node 文档中找到了该功能。链接:- http://nodejs.org/api/dns.html

4

2 回答 2

2

您是否有任何理由要通过网络操作来阻止您的应用程序?DNS 解析器由设计为异步的c-ares库在 C 级别调用。因此,您不能使其同步。这是来自 DNS 模块的代码,删除了不需要的部分:

var cares = process.binding('cares_wrap');

function resolver(bindingName) {
  var binding = cares[bindingName];

  return function query(name, callback) {
    callback = makeAsync(callback);
    var req = {
      bindingName: bindingName,
      callback: callback,
      oncomplete: onresolve
    };
    var err = binding(req, name);
    if (err) throw errnoException(err, bindingName);
    callback.immediately = true;
    return req;
  }
}

var resolveMap = {};
exports.resolveMx = resolveMap.MX = resolver('queryMx');
于 2013-09-13T15:11:21.693 回答
1

2021 年更新

如果有人正在寻找同步调用,promises模块下现在有一个子模块。dns

在这里查看更多

https://nodejs.org/api/dns.html#dns_class_dnspromises_resolver

const dnsPromises = require('dns').promises;
const demo1 = await dnsPromises.resolveMx("gmail.com");
于 2021-09-09T09:09:07.220 回答