Node JS 返回主机名

问题描述 投票:0回答:4

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

我尝试过类似的事情:

 window.location.hostname

但这没有用。示例代码如下:

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

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

javascript node.js hostname
4个回答
158
投票

根据“os”模块的node.js文档,您需要加载“os”模块,该模块具有hostname()

功能:

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

但是,这只是主机名,没有域名(FQDN)。没有简单的方法可以获取 FQDN。您可以使用

node.js DNS 函数 尝试将服务器的 IP 地址(通过 os.networkInterfaces()

 获得,请参阅上面的文档链接)转换为名称。唯一的问题是服务器可能有不同的接口和名称,所以你必须决定你想要哪一个。

您尝试使用

window

 对象,但该对象仅存在于浏览器的 JavaScript 运行时环境中。显然,服务器端 JavaScript 没有窗口,因此没有 
window
 对象。 
看到这个问题:“node.js 是否具有相当于浏览器中的 window 对象”

有了这些信息,你的问题有点奇怪 - 在浏览器中,

window.location.hostname

是当前页面加载的 URL 的主机部分。如何将其转换为服务器上下文?根据定义,您在 node.js 上运行的代码来自该服务器,因此您实际上不需要此信息。您(可能)在浏览器中需要它,因为该信息是可变的,特别是当您运行混搭(来自各种来源的 JS 代码)时,您的代码可能不知道它运行的页面是从哪里加载的。在服务器上,您始终知道这是您的本地文件系统。

顺便说一句,您始终可以使用

localhost

 作为主机名:)


21
投票
如果您使用

http.createServer

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

request.headers.host

我很乐意接受这个答案,但我来这里只是因为我不知道答案。我找到了发布的答案

在这个SO答案


0
投票

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

除非服务器配置了基于名称的虚拟主机,否则可以将其设置为类似于 FQDN 的任何内容。在节点中,您可以将其设置为您想要的任何内容,甚至完全省略它。


0
投票
在 Node.js 中,您可以使用 os 模块获取系统的主机名。具体方法如下:

const os = require('os'); const hostname = os.hostname(); console.log('Hostname:', hostname);
此代码将打印出运行 Node.js 脚本的系统的主机名。

© www.soinside.com 2019 - 2024. All rights reserved.