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.host
Respuestas:
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
express
comando:fuente
var listener
, puede usar la devolución de llamadathis.address().port
internaapp.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
0
aserver.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
this
será indefinidoRequerir el módulo http nunca fue necesario.
No
http
es 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
http
nunca 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().port
có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
findandbind
npm 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