Node JS返回主机名

时间:2013-12-12 20:27:17

标签: javascript node.js hostname

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

我尝试过类似的事情:

 window.location.hostname

但那没用。示例代码如下:

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

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

3 个答案:

答案 0 :(得分:71)

根据to the node.js documentation for the "os" module,您需要加载“os”模块,该模块具有hostname()功能:

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

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

您尝试使用window对象,但这只存在于浏览器的JavaScript运行时环境中。服务器端JavaScript显然没有窗口,因此没有window对象。 See this question: "Does node.js have equivalent to window object in browser"

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

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

答案 1 :(得分:4)

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

request.headers.host

我很乐意接受这个答案,但我只是在这里,因为我不知道答案。我找到了答案at this SO answer

并且,这使您的问题重复。

答案 2 :(得分:-4)

您可以使用

console.log(process.env.host);
相关问题