【问题标题】:Check if domain name exists with node, return boolean false if not, return domain name if it does检查域名是否与节点一起存在,如果不存在则返回布尔值 false,如果存在则返回域名
【发布时间】:2017-11-17 04:45:49
【问题描述】:

我正在尝试查询域名(我将遍历一大堆),看看它们是否存在。我希望任何不存在的域名都返回布尔值 false 以及返回域名本身的任何域名(这样我就可以将其保存到文件中)。目前我有:

var http = require('http'),
    options = {method: 'HEAD', host: 'stackoverflow.com', port: 80, path: '/'};
    req = http.request(options, function(r) {
        console.log(JSON.stringify(r.headers));
    });
req.end();

这是非常基本的,但是我大部分时间都在努力使用 Python 和 Java 代码库,而我真正想要的是一个 if 语句,它可以检查 url 的有效性而不必弄乱标头,如果我更改上面的代码,我必须这样做。

基本上我只是想要:

if(request === successful) {
  return url;
} else {
  return false;
}

为伪代码道歉。欢迎指点(是的,我知道 JavaScript 没有指针;))。

【问题讨论】:

  • 也许您应该使用dns 找出它们是否存在,而不是试图找出它们是否响应
  • @PatrickRoberts 我很想知道该怎么做。虽然我更想知道他们是否会回应,但知道他们的存在至少会有用。
  • @PatrickRoberts 你能回答我如何检查它们是否存在吗?
  • 此解决方案是否也适用于浏览器?

标签: javascript node.js http http-status-code-404


【解决方案1】:

按照我的建议使用dns,您可以执行以下操作:

const dns = require('dns');

let listOfHostnames = [
  'stackoverflow.com',
  'nodejs.org',
  'developer.mozilla.org',
  'google.com',
  'whatisthisidonteven.net'
];

function hostnameExists(hostname) {
  return new Promise((resolve) => {
    dns.lookup(hostname, (error) => resolve({hostname, exists: !error}));
  });
}

Promise.all(listOfHostnames.map(hostnameExists)).then((listOfStatuses) => {
  // check results here
  console.log(listOfStatuses);
});

使用dns.promises,您甚至可以在没有Promise 构造函数的情况下实现hostnameExists()

const dnsPromises = require('dns').promises;

async function hostnameExists(hostname) {
  try {
    await dnsPromises.lookup(hostname);
    return { hostname, exists: true };
  } catch (_) {
    return { hostname, exists: false };
  }
}

【讨论】:

    猜你喜欢
    • 2016-01-18
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-02-20
    • 2021-03-26
    • 1970-01-01
    • 2019-02-15
    相关资源
    最近更新 更多