javascript - Node.js DNS 查找 - 如何设置超时?

标签 javascript node.js dns

我是 Node.js 的新手,我在使用 node.dns.resolveNs 函数时遇到了问题。

某些域完全关闭,大约需要一分钟才能获得响应,通常是“queryNs ETIMEOUT”。我有没有办法将其设置为更短的时间,例如 10 秒?

最佳答案

我不确定直接在函数调用上设置超时的任何方法,但您可以在调用周围创建一个小包装器来自己处理超时:

var dns = require('dns');

var nsLookup = function(domain, timeout, callback) {
  var callbackCalled = false;
  var doCallback = function(err, domains) {
    if (callbackCalled) return;
    callbackCalled = true;
    callback(err, domains);
  };

  setTimeout(function() {
    doCallback(new Error("Timeout exceeded"), null);
  }, timeout);

  dns.resolveNs(domain, doCallback);
};

nsLookup('stackoverflow.com', 1000, function(err, addresses) {
  console.log("Results for stackoverflow.com, timeout 1000:");
  if (err) {
    console.log("Err: " + err);
    return;
  }
  console.log(addresses);
});

nsLookup('stackoverflow.com', 1, function(err, addresses) {
  console.log("Results for stackoverflow.com, timeout 1:");
  if (err) {
    console.log("Err: " + err);
    return;
  }
  console.log(addresses);
});

上述脚本的输出:

Results for stackoverflow.com, timeout 1:
Err: Error: Timeout exceeded
Results for stackoverflow.com, timeout 1000:
[ 'ns1.serverfault.com',
  'ns2.serverfault.com',
  'ns3.serverfault.com' ]

关于javascript - Node.js DNS 查找 - 如何设置超时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10777657/

相关文章:

javascript - 无法检索 Express JS 中表单标签发布的文本数据

javascript - 如何滚动到具有特定 div 类的第一个可见元素?

javascript - 如何使用 Phantomjs 评估从文档中返回任何内容?

node.js - Gulp 将 Node 应用的 dist 文件夹部署到 Heroku

dns - 在Mac El Capitan(10.11.5)中忽略了/etc/hosts

javascript - 如何在 chart.js 中创建时间序列折线图?

javascript - 单击鼠标暂停声音

ajax - 似乎无法从node-formidable获取进度事件以通过socket.io发送到正确的客户端

azure - Azure 静态应用程序中不允许根域

javascript - Chrome 扩展程序 : DNS resolve with chrome. webRequest.onBeforeRequest