我是 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/