2013-12-12 18 views
19

Nadal uczę się Node JS i javascript i mam aplikację. Mam plik konfiguracyjny gdzie muszę chwycić nazwę hosta serwera na Ubuntu 12.04Węzeł JS zwraca nazwę hosta

Próbowałem coś takiego:

window.location.hostname 

Ale to nie działa. Przykładowy kod poniżej:

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

Jeśli używam ciąg będzie ładować w porządku, ale to ma być zarządzany przez Github i musi być zróżnicowana, gdy obciążenia aplikacji.

+2

@Quentin Nie, to jeden jest o gospodarzu w nagłówku żądania HTTP, co najmniej, że odpowiedź został przyjęty - prawda, tytuł jest mylący. –

+1

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

Odpowiedz

39

Według to the node.js documentation for the "os" module trzeba załadować moduł „OS”, który ma hostname() funkcję:

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

jednak, że tylko nazwa hosta - bez nazwy domeny (FQDN). Nie ma łatwego sposobu na uzyskanie nazwy FQDN. Możesz użyć adresu the node.js DNS functions, aby spróbować przekształcić adres IP serwera (który uzyskasz pod numerem os.networkInterfaces(), patrz link do dokumentu powyżej) w nazwie. Jedynym problemem jest to, że serwery mogą mieć różne interfejsy i nazwy, więc musisz podjąć decyzję, który z nich chcesz.

Podjęto próbę użycia obiektu window, ale istnieje tylko w środowisku wykonawczym JavaScript w przeglądarkach. JavaScript po stronie serwera oczywiście nie ma okien, więc nie ma obiektu window. See this question: "Does node.js have equivalent to window object in browser".

Dzięki tym informacjom Twoje pytanie jest nieco dziwne - w przeglądarce window.location.hostname jest częścią adresu URL, z którego załadowano bieżącą stronę. Jak przetłumaczyć to na kontekst serwera? Kod uruchamiany na węźle node.js pochodzi z tego samego serwera, z definicji, więc nie potrzebujesz tych informacji. Możesz (potrzebujesz) go w przeglądarce, ponieważ ta informacja jest zmienna, szczególnie gdy uruchamiasz mashupy (kod JS z różnych źródeł), twój kod może nie wiedzieć, skąd strona, na której działa, została załadowana. Na serwerze zawsze wiesz, że to twój lokalny system plików.

Nawiasem mówiąc, zawsze można użyć localhost jako hosta :)

+0

Powinienem był wyjaśnić. Potrzebuję tej nazwy, aby wysłać dane do zdalnego źródła i muszę rozróżnić, z którego serwera pochodzi. Jeśli uruchomisz polecenie 'hostname' w systemie Linux, zwróci ono nazwę serwera. Chcę, aby ta nazwa została przekazana do mojej konfiguracji, tak aby podczas wysyłania danych mogłem organizować ją przez grupy serwerów, które go obsługują. – nocode

+1

@nocode Nie wyjaśniłeś niczego, ponieważ jeśli użyjesz 'os.hostname()' jak opisano powyżej, otrzymasz nazwę hosta, tak samo jak z poleceniem wiersza poleceń 'hostname'. Jeśli potrzebujesz zdalnego hosta w połączeniu HTTP, twoje pytanie zostało poprawnie oznaczone jako "duplikat", a cała twoja "nazwa hosta" jest całkowicie błędna! Zasadniczo, co mówisz W TEH SAME SENTENCE (!!!) jest to, że potrzebujesz lokalnej nazwy hosta, żadnej zdalnej nazwy hosta. Podejmij decyzję :) –

+0

Nie rozumiesz. Aplikacja wysyła lokalną nazwę hosta i inne statystyki serwera jako dane do zdalnego źródła. Załóżmy, że moje środowisko ma 10 serwerów. Te 10 serwerów będzie wysyłać dane do zdalnego źródła i potrzebuję sposobu na zdefiniowanie nazwy hosta 10 serwerów, aby móc je rozróżnić. Mogę napisać to ręcznie, ale muszę to zrobić automatycznie. Nie ma to nic wspólnego z uzyskiwaniem danych z przeglądarki. – nocode

1

Można użyć

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

Można użyć process.env która zwraca kilka przydatnych pola:

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

I wiele wiele więcej.

Następnie, na przykład, można użyć:

console.log(process.env.OS); 

Który powróci:

Windows_NT