Node JS返回主机名

Node JS return hostname

本文关键字:主机 返回 JS Node      更新时间:2023-09-26

我仍在学习NodeJS和javascript,并拥有一个应用程序。我有一个配置文件,我需要在Ubuntu 12.04 上获取服务器的主机名

我试过类似的东西:

 window.location.hostname

但这并没有奏效。下面的示例代码:

exports.config = {
    app_name : [ window.location.hostname ]
}

如果我使用字符串,它会很好地加载,但这将通过Github进行管理,并且需要在应用程序加载时进行区分。

根据"os"模块的node.js文档,您需要加载"os"模件,该模件具有hostname()函数:

var os = require("os");
var hostname = os.hostname();

但是,这只是主机名,没有域名(FQDN)。获取FQDN没有简单的方法。您可以使用node.js DNS函数尝试将服务器的IP地址(通过os.networkInterfaces()获得,请参阅上面的doc链接)转换为名称。唯一的问题是服务器可能有不同的接口和名称,所以你必须决定你想要哪一个。

您尝试使用window对象,但它只存在于浏览器的JavaScript运行时环境中。显然,服务器端JavaScript没有窗口,因此没有window对象。请参阅以下问题:"node.js在浏览器中是否具有等效的window对象"。

有了这些信息,你的问题就有点奇怪了——在浏览器中,window.location.hostname是加载当前页面的URL的主机部分。如何将其转换为服务器上下文?根据定义,在node.js上运行的代码正是来自该服务器,因此实际上并不需要这些信息。你(可能)需要在浏览器中使用它,因为这些信息是可变的,尤其是当你运行mashup(来自各种来源的JS代码)时,你的代码可能不知道它运行的页面是从哪里加载的。在服务器上,您总是知道它是您的本地文件系统。

顺便说一下,您可以始终使用localhost作为主机名:)

如果使用http.createServer运行服务器,则只能获得与window.location.hostname相同的主机名。在这种情况下,主机名是请求对象的属性之一:

request.headers.host

我很想为这个答案感到自豪,但我来这里只是因为我不知道答案。我在这个SO答案中找到了答案。

Vince的回答是错误的。request.headers.host是客户端在主机标头中传递的值。

除非服务器配置了基于名称的虚拟主机,否则可以将其设置为任何看起来像fqdn的内容。在node中,您可以将它设置为您想要的任何内容,甚至可以完全省略它。