2013-12-12 17 views
19

Ich lerne immer noch Node JS und Javascript und habe eine App. Ich habe eine Konfigurationsdatei, wo ich den Hostnamen des Servers, auf Ubuntu greifen müssen 12,04Node JS Return Hostname

Ich habe versucht, so etwas wie:

window.location.hostname 

Aber das hat nicht funktioniert. Beispielcode unten:

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

Wenn ich eine Zeichenfolge verwenden, wird es in Ordnung laden, aber das wird durch Github zu verwaltenden und muss differenziert werden, wenn die Anwendung geladen wird.

+2

@Quentin Nein, ist, dass man über den Gastgeber in den HTTP-Request-Header, zumindest die Antwort wurde akzeptiert - wahr, der Titel ist irreführend. –

+1

Versuchen Sie http://davidcaylor.com/2012/05/24/finding-the-hostname-in-node-js/ –

Antwort

39

Nach to the node.js documentation for the "os" module benötigen Sie das „o“ Modul zu laden, die eine hostname() Funktion hat:

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

jedoch, dass nur der Hostname ist - ohne die Domänennamen (FQDN). Es gibt keine einfache Möglichkeit, den FQDN zu erhalten. Sie könnten the node.js DNS functions verwenden, um zu versuchen, die IP-Adresse des Servers (die Sie mit os.networkInterfaces() erhalten, siehe doc-Link oben) in einen Namen zu verwandeln. Das einzige Problem ist, dass Server verschiedene Schnittstellen und Namen haben können, also müssen Sie eine Entscheidung treffen, welche Sie wollen.

Sie haben versucht, das Objekt window zu verwenden, das jedoch nur in der JavaScript-Laufzeitumgebung von Browsern existiert. Serverseitiges JavaScript hat offensichtlich keine Fenster, also gibt es kein window Objekt. See this question: "Does node.js have equivalent to window object in browser".

Mit diesen Informationen ist Ihre Frage ein wenig seltsam - im Browser window.location.hostname ist der Host Teil der URL, aus der die aktuelle Seite geladen wurde. Wie übersetzt man das in einen Serverkontext? Der Code, den Sie auf node.js ausführen, stammt per Definition von diesem Server, sodass Sie diese Informationen nicht benötigen. Sie benötigen es im Browser, da diese Informationen variabel sind. Insbesondere wenn Sie Mashups (JS-Code aus verschiedenen Quellen) ausführen, weiß Ihr Code möglicherweise nicht, woher die Seite, auf der er ausgeführt wird, geladen wurde. Auf dem Server wissen Sie immer, dass es sich um Ihr lokales Dateisystem handelt.

By the way, können Sie immer localhost als Hostnamen verwenden :)

+0

Ich sollte geklärt haben. Ich brauche diesen Namen, um Daten an eine entfernte Quelle zu senden, und muss unterscheiden, von welchem ​​Server er kommt. Wenn Sie den Befehl 'Hostname' in Linux ausführen, wird der Servername zurückgegeben. Ich möchte, dass dieser Name in meine Konfiguration übernommen wird, damit ich beim Senden von Daten die Gruppen von Servern organisieren kann. – nocode

+1

@nocode Sie haben nichts geklärt, denn wenn Sie 'os.hostname()' wie oben beschrieben verwenden, erhalten Sie den Hostnamen, genau wie beim Kommandozeilenbefehl 'hostname'. Wenn Sie den Remote-Host in einer HTTP-Verbindung benötigen, wurde Ihre Frage rechtsgültig als "Duplikat" markiert und Ihr gesamter "Hostname" ist völlig falsch! Im Grunde sagen Sie in TEH SAME SENTENCE (!!!), dass Sie den lokalen Hostnamen und keinen Remote-Hostnamen benötigen. Entscheide dich :) –

+0

Du verstehst nicht. Die App sendet den lokalen Hostnamen und andere Serverstatistiken als Daten an eine entfernte Quelle. Nehmen wir an, meine Umgebung hat 10 Server. Diese 10 Server werden Daten an eine entfernte Quelle senden, und ich brauche eine Möglichkeit, den Hostnamen der 10 Server zu definieren, damit ich sie unterscheiden kann. Ich könnte das manuell schreiben, aber das muss automatisch sein. Dies hat nichts damit zu tun, die Daten von einem Browser zu bekommen. – nocode

1

Sie können

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

können Sie process.env verwenden, die einige nützliche Felder zurückgibt:

  • USERDOMAIN
  • BENUTZERNAME
  • Syst EmDrive
  • ENV
  • APPDATA
  • NODE_PATH
  • OS

Und vieles mehr.

Dann zum Beispiel, können Sie verwenden:

console.log(process.env.OS); 

Welche zurückkehren:

Windows_NT