我正在尝试在Node.js中构建一个Api,该Api需要一个URL并检查其是否为有效网站。
现在,dns.lookup拒绝任何无效的URL(伪造的网站),并接受任何有效的URL,只要它们不是以HTTP://或HTTPS://开头。这是有问题的,因为有效的URL被拒绝了。
因此,此URL会生成“无错误”消息:
dns.lookup('www.google.ca', function onLookup(err, address, family)
if (err == null) {
console.log ('No Errors: ' + err + ' - ' + address + ' - ' + family)
} else {
console.log ('Errors: ' + err + ' -- ' + address + ' -- ' + family)
}
});
此带有HTTPS的URL会生成“错误”消息:
dns.lookup('https://www.google.ca/', function onLookup(err, address, family)
if (err == null) {
console.log ('No Errors: ' + err + ' - ' + address + ' - ' + family)
} else {
console.log ('Errors: ' + err + ' -- ' + address + ' -- ' + family)
}
});
console.log输出:
错误:错误:getaddrinfo ENOTFOUND http://www.google.ca/-未定义-未定义
是否可以将dns.lookup配置为接受以HTTP或HTTPS开头的URL?
答案 0 :(得分:1)
dns.lookup
使用主机名。协议不是主机名的一部分,因此不应将其传递。只需通过正则表达式从URL中删除http / https,然后再将其传递给dns.lookup
函数:
const url1 = 'https://google.ca';
const url2 = 'google.com';
const REPLACE_REGEX = /^https?:\/\//i
const res1 = url1.replace(REPLACE_REGEX, '');
const res2 = url2.replace(REPLACE_REGEX, '');
console.log(res1);
console.log(res2);
// dns.lookup(res1...);