我还在学习Node JS和javascript,并有一个应用程序。我有一个配置文件,我需要在Ubuntu 12.04上获取服务器的主机名
我尝试过类似的事情:
window.location.hostname
但那没用。示例代码如下:
exports.config = {
app_name : [ window.location.hostname ]
}
如果我使用字符串,它将加载正常,但这将通过Github进行管理,并且需要在应用程序加载时进行区分。
答案 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);