我们正在开发一个发送电子邮件验证,密码重置等链接的应用程序。我们希望能够动态设置网址的主机名部分,以便部署到临时实例会产生链接回到正确的事情。
是否有方法可以找出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都不同!)