如何找出部署在heroku上的应用程序的主机名

时间:2016-11-01 11:44:32

标签: node.js heroku

我们正在开发一个发送电子邮件验证,密码重置等链接的应用程序。我们希望能够动态设置网址的主机名部分,以便部署到临时实例会产生链接回到正确的事情。

是否有方法可以找出heroku实例上的公共主机名是什么?我尝试了hostname和dnsdomainname,但两者都返回了一个神秘的字符串,而不是真正的公共主机名。

我在node.js应用程序的server.js中尝试了以下方法:

var dns = require('dns');
var getIP = require('external-ip')();

function getPublicDomain() {
  return new Promise((resolve, reject) => {

    // Start by resolving external IP address
    getIP(function (err, ip) {
      if (err) {
        throw err;
      }
      console.log(`External IP address: ${ip}`);
      console.log(`Performing reverse DNS lookup`);

      // Do reverse DNS lookup on the public IP
      dns.reverse(ip, function (err, domains) {
        if (err != null) {
          callback(err);
        }
        var hostname = null;

        async.forEach(domains,
          function (domain, callback) {
            dns.lookup(domain, function (err, address, family) {
              console.log(domain, '[', address, ']');
              if (ip == address) {
                hostname = domain;
              }
              callback();
            });
          },
          function (error) {
            if (error) {
              reject(error);
            } else {
              resolve(hostname);
            }
          });
      });
    });
  });
}

getPublicDomain()
  .then((domain) => {
    console.log(`Public domain name: ${domain}`);
    process.env.DOMAIN=domain
  })
  .catch((error) => {
    console.error(`Could not determine public domain name`);
    console.error(error);
  });

输出不是我预期的结果:

外部IP地址:ZZZ.ZZZ.ZZZ.ZZZ 执行反向DNS查找 ec2-XX-XX-XXX-XXX.eu-west-1.compute.amazonaws.com [YYY.YYY.YYY.YYY] 公共域名:null

(IP被X / Y / Z遮挡,其中X,Y,Z都不同!)

0 个答案:

没有答案