Tengo una aplicación Node.js / Express.js ejecutándose en mi servidor que solo funciona en el puerto 3000 y estoy tratando de averiguar por qué. Esto es lo que encontré:
- Sin especificar un puerto (
app.listen()
), la aplicación se ejecuta pero la página web no se carga. - En el puerto 3001 (
app.listen(3001)
) o cualquier otro puerto que no esté en uso, la aplicación se ejecuta pero la página web no se carga. - En el puerto 2999, la aplicación arroja un error porque otra cosa está usando ese puerto.
- En el puerto 3000, la aplicación se ejecuta y la página web se carga correctamente.
Sé que las aplicaciones Express están predeterminadas en el puerto 3000. Pero, curiosamente, mi aplicación solo se ejecuta cuando hago que se ejecute explícitamente en el puerto 3000 ( app.listen(3000)
).
Encontré esto en la línea 220 de /usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
Lo que está haciendo como se indicó anteriormente: configurar el puerto en lo que se especifica o en 3000 si no se especifica nada.
¿Cómo puedo hacer que mi aplicación funcione en un puerto diferente, como 8080 o 3001?
¡Gracias!
Editar: Ejemplo de código (aplicación Node / Express muy simple)
var express = require("express");
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);
javascript
node.js
configuration
express
port
Benjamín Martín
fuente
fuente
port
requiere A.listen()
, por lo que no debería intentar prescindir. 2) ¿Está recibiendo algún error al ejecutar la aplicación? ¿O simplemente parece inaccesible desde un navegador? 3) ¿Está intentando acceder a la página web en la misma máquina conlocalhost:3000
,localhost:3001
, etc.? Si está utilizando dos máquinas, un cliente y un servidor, deberá agregar excepciones al firewall en el servidor para permitir que Node reciba solicitudes del cliente..listen()
. Arriba, cuando digo, "la aplicación se ejecuta", es lo mismo que dices, "no hay errores al ejecutar la aplicación". Cuando digo "la página web no se carga", es lo mismo que usted dice, "inaccesible desde un navegador". Todo el acceso desde la misma máquina (mi servidor). Gracias por la respuesta.$ supervisor app.js
o$ PORT=[PORT] node app.js
cuando quiero establecer la variable del puerto de entorno. Pondré una muestra de código.Respuestas:
Lo siguiente funciona si tiene algo como esto en su app.js:
O bien codifique explícitamente su código para usar el puerto que desee, como:
Este código significa que configure su puerto en la variable de entorno
PORT
o, si esundefined
así, configúrelo en el literal3000
.O utilice su entorno para configurar el puerto. La configuración a través del entorno se utiliza para ayudar a delinear entre
PRODUCTION
yDEVELOPMENT
también muchas plataformas como servicio utilizan el entorno para configurar el puerto de acuerdo con sus especificaciones, así como las configuraciones internas Express. Lo siguiente establece un par de clave = valor de entorno y luego inicia su aplicación.En referencia a su ejemplo de código, quiere algo como esto:
fuente
app.set()
código dentro de mi aplicación y cambié 3000 a 8080. Todavía solo funcionaapp.listen(3000)
. 2. Cambie la variable del puerto de entorno a 8080 cuando ejecute la aplicación de nodo. Todavía solo funcionaapp.listen(3000)
. 3. Se fue a / usr / bin / express (línea 220) y cambió 3000 a 8080. Todavía solo funcionaapp.listen(3000)
. Sin embargo, gracias por la publicación informativa. ¿Hay algo que deba reiniciar? Express no se puede reiniciar por lo que puedo decir y el reinicio de la aplicación Node ocurre cada vez que lo usonode app.js.
node app.js
lo iniciará (yo personalmente usonodemon
cuando desarrollo y prueba. Lo que podría estar pensando es en elexpress
ejecutable de línea de comandos que es un proceso auxiliar que construye su esqueleto estructura de archivo. ¿Puedes publicar un resumen de tu código?nodemon
junto connohup
para mantener mi aplicación ejecutándose indefinidamente. No estoy usando la versión ejecutable de CL, porexpress
lo que debe reiniciarse cada vez que reinicio minode
aplicación. Vea mi publicación original para una edición con código. ¡Gracias!En
bin/www
, hay una línea:Intente modificarlo.
fuente
Prueba esto
fuente
Intente ubicar la ubicación bin> www e intente cambiar el número de puerto ...
fuente
La forma predeterminada de cambiar el puerto de escucha en el marco Express es modificar el archivo llamado www en la carpeta bin.
Allí, encontrará una línea como la siguiente
Cambie el valor 3000 a cualquier puerto que desee.
Esto es válido para Express versión 4.13.1
fuente
Solo una nota para los usuarios de Mac OS X y Linux:
Si desea ejecutar su aplicación Node / Express en un número de puerto inferior a 1024, debe ejecutar como superusuario:
sudo PORT=80 node app.js
fuente
En la última versión del código con express-generator (4.13.1) app.js es un módulo exportado y el servidor se inicia en / bin / www usando app.set ('port', process.env.PORT || 3001) en app.js será anulado por una declaración similar en bin / www. Acabo de cambiar la declaración en bin / www.
fuente
Noté que esto nunca se resolvió ... Es probable que tenga un firewall frente a su máquina que bloquea esos puertos, o iptables está configurado para evitar el uso de esos puertos.
Intente ejecutar nmap -F localhost cuando ejecute su aplicación (instale nmap si no lo tiene). Si parece que está ejecutando la aplicación en el puerto correcto y no puede acceder a ella a través de un navegador remoto, entonces hay algún middleware o un firewall físico que está bloqueando el puerto.
¡Espero que esto ayude!
fuente
La línea que encontró solo busca la variable ambiental
PORT
, si está definida, la usa, de lo contrario usa el puerto predeterminado3000
. Primero debe definir esta variable de entorno (no es necesario ser root)fuente
Si quieres mostrar algo, estás conectado en 3000
Espero que te sea de ayuda
fuente
Responde según la versión actual de express
Si habla sobre la versión actual de express , si ejecuta
app.listen()
para comenzar a escuchar sin especificar el puerto, Express elegirá un puerto aleatorio para su aplicación, para averiguar qué puerto se está ejecutando actualmente en uso.debería generar el puerto de su
app
. Además, ese primer parámetro0
se puede ignorar por completo, pero no se recomiendafuente
Asegúrese de estar ejecutando desde esa carpeta de su aplicación, donde tiene el package.json.
fuente
Estoy usando el
minimist
paquete y los argumentos de inicio del nodo para controlar el puerto.node server.js --port 4000
o
node server.js -p 4000
Dentro de server.js, el puerto se puede determinar mediante
y el valor predeterminado es 3000 si no se pasa ningún puerto como argumento.
Luego puede usar listen en la
port
variable.fuente
En app.js, simplemente agregue ...
Esto aislará la variable PORT de la aplicación express.
fuente
Creo que la mejor manera es usar el paquete dotenv y configurar el puerto en el
.env
archivo de configuración sin modificar el archivowww
dentro de la carpetabin
.Simplemente instale el paquete con el comando:
requiera en su aplicación:
Cree un archivo .env en el directorio raíz de su proyecto y agregue el puerto en él (por ejemplo) para escuchar en el puerto 5000
y eso es.
Más info aquí
fuente
Si está utilizando Nodemon, supongo que el PORT 3000 está configurado en nodemonConfig. Compruebe si ese es el caso.
fuente