Vous voyez souvent un exemple de code hello world pour Node qui crée un serveur Http, commence à écouter sur un port, puis suivi par quelque chose du genre:
console.log('Server is listening on port 8000');
Mais idéalement, vous voudriez plutôt ceci:
console.log('Server is listening on port ' + server.port);
Comment récupérer le port sur lequel le serveur écoute actuellement sans stocker le numéro dans une variable avant d'appeler server.listen()
?
J'ai déjà vu cela faire mais je ne le trouve pas dans la documentation Node. Peut-être que c'est quelque chose de spécifique à exprimer?
javascript
node.js
express
port
David Tang
la source
la source
req.headers.host
Réponses:
Réponse express 4.x:
Express 4.x (selon la réponse de Tien Do ci-dessous), traite désormais app.listen () comme une opération asynchrone, donc listener.address () ne retournera que les données à l'intérieur du rappel de app.listen ():
Réponse Express 3:
Je pense que vous recherchez ceci (express spécifique?):
Vous avez peut-être vu ceci (ligne du bas), lorsque vous créez une structure de répertoire à partir de la
express
commande:la source
var listener
vous pouvez utiliser le rappelthis.address().port
interneapp.listen()
this.address.port()
mais vous ne pouvez pas l'utiliser dans une fonction de flèche. vous devrez faire de la vieille écoleapp.listen(8000, function () { console.log('http://localhost:' + this.address().port); }
(oui, je sais que les backticks sont plus gentils, mais je ne peux pas les faire dans les commentaires de débordement de pile)Dans express v3.0,
ne fonctionne plus! Pour Express v3.0, vous devez créer une application et un serveur de cette façon:
J'ai couru moi-même sur ce problème et je voulais documenter la nouvelle syntaxe. Ceci et d'autres changements dans Express v3.0 sont visibles à https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
la source
0
àserver.listen()
, auquel cas un numéro de port aléatoire est attribué. Vous pouvez le faire si vous exécutez plusieurs applications Express sur un serveur et que vous ne souhaitez pas attribuer manuellement des numéros de port.app.listen()
renvoie également l'instance de serveur http.Dans la version actuelle (v0.5.0-pre), 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
les sorties
la source
Si vous avez besoin d'un port au moment du traitement de la demande et que l'application n'est pas disponible, vous pouvez utiliser ceci:
la source
Si vous utilisez express, vous pouvez l'obtenir à partir de l'objet request:
la source
J'utilise de cette façon Express 4:
En utilisant cela, je n'ai pas besoin d'utiliser une variable distincte pour l'auditeur / serveur.
la source
this
sera indéfini.Il n'a jamais été nécessaire d'exiger le module http.
Une importation supplémentaire de
http
n'est pas nécessaire dans Express 3 ou 4. L'affectation du résultat delisten()
suffit.Encore une fois, cela est testé dans Express 3.5.1 et 4.0.0. L'importation
http
n'a jamais été nécessaire. La méthode listen renvoie un objet serveur http. https://github.com/visionmedia/express/blob/master/lib/application.js#L531la source
Avec le dernier node.js (v0.3.8-pre): j'ai vérifié la documentation, inspecté l'instance de serveur renvoyée par http.createServer (), et lu le code source de server.listen () ...
Malheureusement, le port n'est stocké que temporairement en tant que variable locale et se termine en argument dans un appel à process.binding ('net'). Bind () qui est une méthode native. Je n'ai pas cherché plus loin.
Il semble qu'il n'y ait pas de meilleur moyen que de conserver une référence à la valeur de port que vous avez fournie à server.listen ().
la source
Le moyen le plus simple de convertir l'ancien style au nouveau style (Express 3.x) est le suivant:
Pre 3.x cela fonctionne comme ceci:
la source
la source
Je me posais aussi cette question, puis je suis venu à la page du guide Express 4.x pour voir cet exemple:
la source
Vous pouvez obtenir le numéro de port en utilisant
server.address().port
comme dans le code ci-dessous:la source
la source
Si vous n'avez pas défini le numéro de port et que vous souhaitez savoir sur quel port il s'exécute.
FYI, chaque fois qu'il fonctionnera dans un port différent.
la source
Le
findandbind
npm résout cela pour express / restify / connect: https://github.com/gyllstromk/node-find-and-bindla source
ci-dessous un simple serveur http et comment obtenir le port d'écoute
puis récupérez le port du serveur en utilisant:
la source
la source
Le moyen le plus simple est simplement d'appeler
app.get('url')
, ce qui vous donne le protocole, le sous-domaine, le domaine et le port.la source