在Node.js(在Windows上运行)中如何获取域名

在Node.js(在Windows上运行)中如何获取域名,node.js,dns,Node.js,Dns,我的nodejshttp服务器(在Windows上)需要监听主机名,而不是localhost/127.0.0.1 为此,我需要Windows计算机的完整主机名(包括域名),但我无法获取完整主机名 我试着用 require('os').hostname() 但是它没有给我完整的主机名 因此,我尝试了以下方法: var dns = require('dns'); var os = require('os'); var hostname = os.hostname();

我的nodejshttp服务器(在Windows上)需要监听主机名,而不是localhost/127.0.0.1

为此,我需要Windows计算机的完整主机名(包括域名),但我无法获取完整主机名

我试着用

require('os').hostname()     
但是它没有给我完整的主机名

因此,我尝试了以下方法:

var dns = require('dns');    
var os = require('os');    
var hostname = os.hostname();   
console.log("Short hostname = ", hostname);     

dns.lookup(hostname, function (err, add, fam) {       
    if (err)    
    {    
             console.log("The error = ", JSON.stringify(err));    
             return;    
    }    
    console.log('addr: '+add);     
    console.log('family: ' + fam);    
    dns.reverse(add, function(err, domains){    
    if (err)    
    {    
        console.log("The reverse lookup error = ", JSON.stringify(err));    
        return;    
    }    
    console.log("The full domain name ", domains);    
});    
})     
上面的代码运行良好,当我在企业的以太网上时,我得到以下输出

C:\>node getFullHostname.js    
Short hostname  =  SPANUGANTI    
addr: 16.190.58.214    
family: 4    
The full domain name  [ 'spanuganti.abc.xyz.net' ]    
C:\>node getFullHostname.js    
Short hostname  =  SPANUGANTI    
addr: 16.183.204.47    
family: 4    
The reverse lookup error =    
{"code":"ENOTFOUND","errno":"ENOTFOUND","syscall":"getHostByAddr"}   
但当我连接到企业的无线网络时,相同的代码不起作用

C:\>node getFullHostname.js    
Short hostname  =  SPANUGANTI    
addr: 16.190.58.214    
family: 4    
The full domain name  [ 'spanuganti.abc.xyz.net' ]    
C:\>node getFullHostname.js    
Short hostname  =  SPANUGANTI    
addr: 16.183.204.47    
family: 4    
The reverse lookup error =    
{"code":"ENOTFOUND","errno":"ENOTFOUND","syscall":"getHostByAddr"}   
所以需要下面的帮助吗

  • 有没有一种简单的方法可以在Node.js中获取完整的机器名(Windows)
  • 或者请让我知道我上面的代码有什么问题

  • 您不需要完整的主机名来监听,实际上您需要您的IP地址。查看该函数。

    您不需要完整的主机名来监听,实际上您需要您的IP地址。查看该功能。

    服务器不监听主机名,而是监听IP地址。您永远不应该依赖外部DNS的内容来确定绑定到哪里

    最简单的解决方案是将其绑定到
    INADDR\u ANY
    地址,该地址在数字上相当于
    0.0.0


    这将允许对任何接口(包括环回)进行查询。

    服务器不监听主机名,而是监听IP地址。您永远不应该依赖外部DNS的内容来确定绑定到哪里

    最简单的解决方案是将其绑定到
    INADDR\u ANY
    地址,该地址在数字上相当于
    0.0.0


    这将允许对任何接口(包括环回)进行查询。

    我想要完整计算机的原因是因为以下原因:在我们的暂存环境中,我的服务器正在本地主机上侦听,客户端使用计算机的IP地址和端口连接以访问我的服务器。由于某种原因,我不得不重新启动我的服务器,到那时机器的IP发生了变化。现在我必须通知所有的客户端,IP已经更改,他们必须更改他们的代码才能连接到我的服务器。那么绑定到0.0.0.0会解决这个问题吗?@Chary这里肯定有些混乱-如果您在127.0.0.1上监听,那么远程客户端无法连接,只有在同一台机器上运行的客户端才能连接。我想要拥有完整机器的原因是因为以下原因:在我们的登台环境中,我的服务器正在本地主机上侦听,客户端使用机器的IP地址和端口连接以访问我的服务器。由于某种原因,我不得不重新启动我的服务器,到那时机器的IP发生了变化。现在我必须通知所有的客户端,IP已经更改,他们必须更改他们的代码才能连接到我的服务器。那么绑定到0.0.0.0会解决这个问题吗?@Chary这里肯定有些混乱-如果您正在监听127.0.0.1,那么远程客户端无法连接,只有在同一台机器上运行的客户端才能连接。