Javascript 从异步dns.lookup()函数返回值时出错
我正在编写一个函数,使用Javascript 从异步dns.lookup()函数返回值时出错,javascript,node.js,async-await,dns,Javascript,Node.js,Async Await,Dns,我正在编写一个函数,使用dns.lookup()函数验证url,定义如下: const dns = require('dns'); const verifyURL = (url) => { const protocolRegEx = /^https?:\/\/(.*)/i; const hostnameRegEx = /^([a-z0-9\-_]+\.)+[a-z0-9\-_]+/i; if (url.match(/\/$/i)) { url = url.slice
dns.lookup()
函数验证url
,定义如下:
const dns = require('dns');
const verifyURL = (url) => {
const protocolRegEx = /^https?:\/\/(.*)/i;
const hostnameRegEx = /^([a-z0-9\-_]+\.)+[a-z0-9\-_]+/i;
if (url.match(/\/$/i)) {
url = url.slice(0,-1);
}
const protocol = url.match(protocolRegEx);
if (!protocol) {
return false;
}
const hostname = protocol[1].match(hostnameRegEx);
if (hostname) {
dns.lookup(hostname[0], (err, adderss) => {
if (err) return false;
return adderss;
})
}
}
我试图从传递给dns.lookup()
函数的回调内部返回true
或false
(async () => {
let x = await verifyURL('https://stackoverflow.com/')
console.log(x);
})();
但每次运行此代码时,我都会得到未定义的
作为返回值。
我已经试过了,但没用。
请帮帮我。谢谢 您正在等待一个函数verifyURL,该函数不返回承诺
一个选项是修改verifyURL
函数以返回承诺
const verifyURL=(url)=>{
常量protocolRegEx=/^https?:\/\/(.*)/i;
const hostnameRegEx=/^([a-z0-9\-\\+\)+[a-z0-9\-\\\+/i;
if(url.match(/\/$/i)){
url=url.slice(0,-1);
}
const protocol=url.match(protocolRegEx);
如果(!协议){
返回false;
}
const hostname=协议[1]。匹配(hostnameRegEx);
//验证这个!我添加这个来返回false if!hostname
如果(!主机名){
返回错误
}
返回新承诺((解决、拒绝)=>{
dns.lookup(主机名[0],(错误,地址)=>{
如果(错误){
退货拒绝(err);
}
//在这里我决心解决。你可以解决为真,正如你在你的帖子中提到的。
返回解析(地址)
});
});
}
你也应该处理拒绝承诺的问题。
例如,查找将给您一个错误“getaddrinfo ENOTFOUND stackoverflow2.com”
(异步()=>{
试一试{
设x=等待验证URL('https://stackoverflow.com')
控制台日志(x);
}捕获(e){
控制台错误(e.message)
}
})();
另一种选择是使用我的理解是异步等待
与承诺一起工作。您是否应该改用DNS承诺API?