web-dev-qa-db-fra.com

Node JS return hostname

J'apprends toujours Node JS et javascript et j'ai une application. J'ai un fichier de configuration où je dois récupérer le nom d'hôte du serveur sur Ubuntu 12.04

J'ai essayé quelque chose comme:

 window.location.hostname

Mais ça n'a pas marché. Exemple de code ci-dessous:

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

Si j'utilise une chaîne, elle se chargera correctement, mais cela va être géré via Github et doit être différencié lors du chargement de l'application.

38
nocode

Selon à la documentation node.js pour le module "os" vous devez charger le module "os", qui a une fonction hostname():

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

Cependant, ce n'est que le nom d'hôte - sans le nom de domaine (le FQDN). Il n'y a pas de moyen facile d'obtenir le nom de domaine complet. Vous pouvez utiliser les fonctions DNS de node.js pour essayer de transformer l'adresse IP du serveur (que vous obtenez avec os.networkInterfaces(), voir le lien doc ci-dessus) en un nom. Le seul problème est que les serveurs peuvent avoir des interfaces et des noms différents, vous devez donc décider lequel vous voulez.

Vous avez essayé d'utiliser l'objet window, mais cela n'existe que dans l'environnement d'exécution JavaScript des navigateurs. Le côté serveur JavaScript n'a pas de fenêtres, évidemment, donc il n'y a pas d'objet window. Voir cette question: "Est-ce que node.js a l'équivalent d'un objet fenêtre dans le navigateur" .

Avec ces informations, votre question est un peu étrange - dans le navigateur window.location.hostname Se trouve la partie hôte de l'URL à partir de laquelle la page actuelle a été chargée. Comment traduisez-vous cela dans un contexte de serveur? Le code que vous exécutez sur node.js provient de ce même serveur, par définition, vous n'avez donc pas réellement besoin de ces informations. Vous en avez peut-être besoin dans le navigateur car ces informations sont variables, en particulier lorsque vous exécutez des mashups (code JS provenant de diverses sources), votre code peut ne pas savoir d'où la page sur laquelle il s'exécute a été chargée. Sur le serveur, vous savez toujours que c'est votre système de fichiers local.

Au fait, vous pouvez toujours utiliser localhost comme nom d'hôte :)

79
John Smith

Vous ne pouvez obtenir que le même nom d'hôte que vous obtiendriez de window.location.hostname si vous exécutez un serveur avec http.createServer . Dans ce cas, le nom d'hôte est l'une des propriétés de l'objet de demande:

request.headers.Host

J'adorerais prendre le crédit de cette réponse, mais je ne suis ici que parce que je ne connaissais pas la réponse. J'ai trouvé la réponse publiée à ce SO réponse .

6
Vince