2013-12-12 101 views
19

我還在學習節點JS和JavaScript,並有一個應用程序。我有一個配置文件,我需要搶服務器的主機名在Ubuntu 12.04節點JS返回主機名

我想是這樣的:

window.location.hostname 

但沒有奏效。下面的示例代碼:

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

如果我使用一個字符串,它會載入罰款,但是這是要通過Github上進行管理,需要在應用程序加載時區分。

+2

@Quentin不,一個是關於在HTTP請求頭中的主機,至少這個問題的答案被接受 - 是真的,標題是誤導性的。 –

+1

請嘗試http://davidcaylor.com/2012/05/24/finding-the-hostname-in-node-js/ –

回答

39

根據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上運行的代碼來自該服務器,因此您實際上並不需要此信息。你(可能)需要它在瀏覽器中,因爲這些信息是可變的,特別是當你運行混搭(來自不同來源的JS代碼)時,你的代碼可能不知道它所運行的頁面從哪裏加載。在服務器上你總是知道它是你的本地文件系統。

順便說一句,你可以隨時使用localhost作爲主機名:)

+0

我應該澄清。我需要這個名字來將數據發送到遠程源,並且需要區分它來自哪個服務器。如果你在linux中運行'hostname'命令,它將返回服務器名稱。我希望這個名字被傳遞到我的配置文件中,以便當它發送數據時,我可以通過運行它的服務器組進行組織。 – nocode

+1

@nocode你還沒有澄清任何事情,因爲如果你按照上面的描述使用'os.hostname()',你可以得到主機名,和命令行命令'hostname'一樣。如果您需要HTTP連接中的遠程主機,則您的問題已被有效標記爲「重複」,並且您的所有「主機名」內容都完全錯誤!基本上,你說同樣的話(!!!)是你需要本地主機名,而不是遠程主機名。下定決心:) –

+0

你不理解。該應用程序將本地主機名和其他服務器統計數據作爲數據發送到遠程源。假設我的環境有10臺服務器。這10臺服務器將向遠程源發送數據,我需要一種定義10臺服務器主機名的方式,以便我可以區分它們。我可以手動寫出來,但需要這是自動的。這與從瀏覽器獲取數據無關。 – nocode

1

您可以使用

console.log(process.env.host); 
0

您可以使用process.env返回一些有用的字段:

  • USERDOMAIN
  • USERNAME
  • Syst emDrive
  • ENV
  • APPDATA
  • NODE_PATH
  • OS

以及更多。

然後,例如,你可以使用:

console.log(process.env.OS); 

將返回:

Windows_NT