2013-12-12 18 views
19

Sto ancora imparando il nodo JS e javascript e ho un'app. Ho un file di configurazione in cui ho bisogno di afferrare il nome host del server su Ubuntu 12.04Node JS restituzione nome host

ho provato qualcosa di simile:

window.location.hostname 

Ma che non ha funzionato. Il codice di esempio qui di seguito:

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

Se io uso una stringa, caricherà bene, ma questo sta per essere gestito attraverso Github e deve essere differenziato al caricamento di app.

+2

@Quentin No, quello è circa l'host nell'intestazione della richiesta HTTP, almeno quella risposta è stato accettato - vero, il titolo è fuorviante. –

+1

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

risposta

39

Secondo to the node.js documentation for the "os" module è necessario caricare il modulo "os", che ha una funzione hostname():

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

tuttavia, che solo è il nome host - senza il nome di dominio (il nome di dominio). Non esiste un modo semplice per ottenere il FQDN. È possibile utilizzare the node.js DNS functions per provare a trasformare l'indirizzo IP del server (che si ottiene con os.networkInterfaces(), vedere il collegamento doc sopra) in un nome. L'unico problema è che i server possono avere interfacce e nomi diversi, quindi devi prendere una decisione su quale vuoi.

Hai provato a utilizzare l'oggetto window, ma questo esiste solo nell'ambiente di runtime JavaScript dei browser. Il lato server JavaScript non ha finestre, ovviamente, quindi non esiste l'oggetto window. See this question: "Does node.js have equivalent to window object in browser".

Con queste informazioni la tua domanda è un po 'strana - nel browser window.location.hostname è la parte host dell'URL da cui è stata caricata la pagina corrente. Come lo traduci in un contesto server? Il codice che esegui su node.js proviene proprio da quel server, per definizione, quindi non hai realmente bisogno di queste informazioni. Potresti (potresti) averne bisogno nel browser perché tali informazioni sono variabili, specialmente quando esegui mashup (codice JS da varie fonti) il tuo codice potrebbe non sapere da dove è stata caricata la pagina su cui viene eseguita. Sul server sai sempre che è il tuo filesystem locale.

A proposito, si può sempre utilizzare localhost come il nome host :)

+0

Avrei dovuto chiarire. Ho bisogno di questo nome per inviare dati a una fonte remota e ho bisogno di differenziare da quale server proviene. Se si esegue il comando 'hostname' in linux, verrà restituito il nome del server. Voglio che questo nome venga passato alla mia configurazione in modo tale che quando invia i dati, posso organizzarli in base ai gruppi di server che lo eseguono. – nocode

+1

@nocode Non hai chiarito nulla, perché se usi 'os.hostname()' come descritto sopra ottieni il nome host, come con il comando da riga di comando 'hostname'. Se hai bisogno dell'host remoto in una connessione HTTP, la tua domanda è stata validamente contrassegnata come "duplicata" e tutte le tue "hostname" sono completamente sbagliate! Fondamentalmente, quello che dici in TEH SAME SENTENCE (!!!) è che hai bisogno del nome host locale, non del nome host remoto. Deciditi :) –

+0

Non stai capendo. L'app invia il nome host locale e altre statistiche del server come dati a una fonte remota. Diciamo che il mio ambiente ha 10 server. Questi 10 server invieranno dati a una fonte remota e ho bisogno di un modo per definire il nome host dei 10 server in modo da poterli differenziare. Potrei scriverlo manualmente, ma è necessario che sia automatico. Questo non ha nulla a che fare con il recupero dei dati da un browser. – nocode

1

È possibile utilizzare

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

È possibile utilizzare process.env che restituisce alcuni campi utili:

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

E molto altro ancora.

Quindi, per esempio, è possibile utilizzare:

console.log(process.env.OS); 

che restituirà:

Windows_NT