A menudo ve un ejemplo de código hello world para Node que crea un servidor Http, comienza a escuchar en un puerto y luego sigue algo como:
console.log('Server is listening on port 8000');
Pero idealmente querrías esto en su lugar:
console.log('Server is listening on port ' + server.port);
¿Cómo recupero el puerto que el servidor está escuchando actualmente sin almacenar el número en una variable antes de llamar server.listen()?
He visto esto antes, pero no puedo encontrarlo en la documentación del Nodo. Tal vez es algo específico para expresar?
javascript
node.js
express
port
David Tang
fuente
fuente

req.headers.hostRespuestas:
Exprese la respuesta 4.x:
Express 4.x (según la respuesta de Tien Do a continuación), ahora trata app.listen () como una operación asincrónica, por lo que listener.address () solo devolverá datos dentro de la devolución de llamada de app.listen ():
Expresa 3 respuestas:
Creo que estás buscando esto (¿expreso específico?):
Es posible que haya visto esto (línea inferior), cuando crea la estructura de directorios desde el
expresscomando:fuente
var listener, puede usar la devolución de llamadathis.address().portinternaapp.listen()this.address.port()pero no puede usar eso dentro de una función de flecha. tendrá que hacer la vieja escuelaapp.listen(8000, function () { console.log('http://localhost:' + this.address().port); }(sí, ya sé acentos abiertos son más agradables, pero no puede hacerlo en los comentarios de desbordamiento de pila)En express v3.0,
ya no funciona! Para Express v3.0, debe crear una aplicación y un servidor de esta manera:
Me encontré con este problema yo mismo y quería documentar la nueva sintaxis. Este y otros cambios en Express v3.0 están visibles en https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
fuente
0aserver.listen(), en cuyo caso se asigna un número de puerto aleatorio. Puede hacer esto si está ejecutando varias aplicaciones Express en un servidor y no desea asignar números de puerto manualmente.app.listen()también devuelve la instancia del servidor http.En la versión actual (v0.5.0-pre), el puerto parece estar disponible como una propiedad en el objeto del servidor, consulte http://nodejs.org/docs/v0.4.7/api/net.html#server.address
salidas
fuente
En caso de que necesite un puerto en el momento del manejo de la solicitud y la aplicación no esté disponible, puede usar esto:
fuente
Si está utilizando express, puede obtenerlo del objeto de solicitud:
fuente
Yo uso de esta manera Express 4:
Al usar esto, no necesito usar una variable separada para el oyente / servidor.
fuente
thisserá indefinidoRequerir el módulo http nunca fue necesario.
No
httpes necesaria una importación adicional de Express 3 o 4. Asignar el resultado delisten()es suficiente.Nuevamente, esto se prueba en Express 3.5.1 y 4.0.0. Importar
httpnunca fue necesario. El método listen devuelve un objeto de servidor http. https://github.com/visionmedia/express/blob/master/lib/application.js#L531fuente
Con el último node.js (v0.3.8-pre): verifiqué la documentación, inspeccioné la instancia del servidor devuelta por http.createServer () y leí el código fuente de server.listen () ...
Lamentablemente, el puerto solo se almacena temporalmente como una variable local y termina como un argumento en una llamada a process.binding ('net'). Bind (), que es un método nativo. No busqué más.
Parece que no hay mejor manera que mantener una referencia al valor del puerto que proporcionó a server.listen ().
fuente
La forma más sencilla de convertir del estilo antiguo al nuevo (Express 3.x) es así:
Pre 3.x funciona así:
fuente
fuente
También me hacía esta pregunta, luego llegué a la página de guía Express 4.x para ver esta muestra:
fuente
Puede obtener el número de puerto utilizando el
server.address().portcódigo siguiente:fuente
fuente
Si no definió el número de puerto y desea saber en qué puerto se está ejecutando.
Para su información, cada vez se ejecutará en un puerto diferente.
fuente
El
findandbindnpm aborda esto para express / restify / connect: https://github.com/gyllstromk/node-find-and-bindfuente
debajo de un servidor http simple y cómo obtener el puerto de escucha
luego obtenga el puerto del servidor usando:
fuente
fuente
La forma más fácil es simplemente llamar
app.get('url'), lo que le proporciona el protocolo, subdominio, dominio y puerto.fuente