NodeJS: Comment obtenir le port du serveur?
Vous souvent voir l'exemple hello world code pour le Nœud qui crée un Serveur Http, démarre à l'écoute sur un port, puis quelque chose le long des lignes de:
console.log('Server is listening on port 8000');
Mais, idéalement, vous voulez plutôt ceci:
console.log('Server is listening on port ' + server.port);
Comment puis-je récupérer le port que le serveur est actuellement en écoute sur sans stocker le nombre dans une variable avant de faire appel à server.listen()
?
J'ai vu cela avant, mais je ne le trouve pas dans le Nœud de la documentation. C'est peut-être quelque chose de spécifique pour s'exprimer?
- Trouver dans
req.headers.host
Vous devez vous connecter pour publier un commentaire.
Express 4.x réponse:
Express 4.x (par Tien à Faire réponse ci-dessous), traite maintenant app.listen() comme une opération asynchrone, donc à l'écoute.adresse() ne retourne que les données à l'intérieur de l'app.listen()'s rappel:
Express 3 réponse:
Je pense que vous êtes à la recherche pour cette(expresse et spécifique?):
Vous pourriez avoir vu cette(ligne du bas), lorsque vous créez la structure de répertoire de
express
commande:var listener
vous pouvez utiliserthis.address().port
à l'intérieur deapp.listen()
de rappelthis.address.port()
mais vous ne pouvez utiliser qu'à l'intérieur d'une flèche fonction. vous devrez faire de la vieille écoleapp.listen(8000, function () { console.log('http://localhost:' + this.address().port); }
(oui, je sais backticks sont plus agréable, mais je ne peux pas faire dans le débordement de pile commentaires)Dans l'express v3.0,
ne fonctionne plus! Pour l'Express v3.0, vous devez créer une application et un serveur de cette façon:
J'ai couru à ce problème moi-même et je voulais document la nouvelle syntaxe. Ceci et d'autres changements dans l'Express v3.0 sont visibles à https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
0
àserver.listen()
, dans ce cas, un numéro de port aléatoire est attribué. Vous pouvez faire cela que si vous utilisez plusieurs Exprimer des applications sur un serveur et que vous ne voulez pas assigner manuellement les numéros de port.app.listen()
renvoie également le serveur http de l'instance.Dans la version actuelle (v0.5.0-avant), le port semble être disponible en tant que propriété sur l'objet serveur, voir http://nodejs.org/docs/v0.4.7/api/net.html#server.address
sorties
Si vous utilisez express, vous pouvez l'obtenir à partir de l'objet de la requête:
Dans le cas où vous avez besoin d'un port au moment de la demande de la manipulation et de l'application n'est pas disponible, vous pouvez utiliser ceci:
- Je utiliser cette voie Express 4:
En utilisant ce je n'ai pas besoin d'utiliser une variable pour l'auditeur/serveur.
this
ne sera pas défini.Nécessitant le module http n'a jamais été nécessaire.
Supplémentaires à l'importation de
http
n'est pas nécessaire dans l'Express 3 ou 4. L'affectation du résultat delisten()
est assez.Encore une fois, ceci est testé dans l'Express 3.5.1 & 4.0.0. L'importation de
http
n'a jamais été nécessaire. L'écouter méthode retourne un serveur http de l'objet.https://github.com/visionmedia/express/blob/master/lib/application.js#L531
Avec la dernière node.js (v0.3.8-avant): j'ai vérifié la documentation, de l'inspecter l'instance de serveur retourné par http.createServer(), et de lire le code source du serveur.listen()...
Malheureusement, le port est à seulement temporairement stockés en tant que variable locale et se termine comme un argument dans l'appel de processus.de liaison ("net").bind() qui est une méthode native. Je n'ai pas chercher plus loin.
Il semble qu'il n'y a pas de meilleure façon de garder une référence à la valeur du port que vous avez fourni au serveur.listen().
La façon la plus simple de convertir de l'ancien style de la nouvelle (Express 3.x) le style est comme ceci:
Pre 3.x il fonctionne comme ceci:
Vous pouvez obtenir le numéro de port en utilisant
server.address().port
comme dans le code ci-dessous:
Je me posais cette question aussi, puis je suis venu Express 4.x guide page pour voir cet exemple:
La
findandbind
mnp adresses ce pour express/restify/connect: https://github.com/gyllstromk/node-find-and-bindSi vous n'avez pas de définir le numéro de port et que vous voulez savoir sur quel port il est en cours d'exécution.
Pour info, à chaque fois, il sera exécuté dans un port différent.
ci-dessous un simple serveur http et comment obtenir le port d'écoute
puis obtenir le port du serveur à l'aide de :
La manière la plus simple est juste de l'appeler
app.get('url')
, qui vous donne le protocole, sous-domaine, le domaine et le port.