javascript - servidor - npm
La aplicaciĆ³n Node.js/Express.js solo funciona en el puerto 3000 (13)
Tengo una aplicación Node.js / Express.js ejecutándose en mi servidor que solo funciona en el puerto 3000 y estoy tratando de descubrir por qué. Esto es lo que he encontrado:
- 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 en 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 carga bien.
Sé que las aplicaciones Express son predeterminadas para el puerto 3000. Pero, curiosamente, mi aplicación solo se ejecuta cuando explícitamente la ejecuto 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);
Que está haciendo lo que se dijo anteriormente: configurar el puerto a lo especificado o a 3000 si no se especifica nada.
¿Cómo podría hacer que mi aplicación funcione en un puerto diferente, como 8080 o 3001?
¡Gracias!
Editar: Muestra de código (Nodo muy simple / Aplicación Express)
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);
Respuesta de acuerdo a la versión actual de expreso
Si habla de 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 sobre qué puerto se está ejecutando actualmente en uso
app.listen(0, () => {
console.log(app.address().port)
}
debería dar salida al puerto de tu app
. Además, ese primer parámetro 0
se puede ignorar por completo, pero no se recomienda
Asegúrese de estar ejecutando desde esa carpeta de su aplicación, donde tiene el paquete.json.
En bin/www
, hay una línea:
var port = normalizePort(process.env.PORT || ''3000'');
Intenta modificarlo
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 utilizando 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.
Estoy usando el paquete minimist
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 puede determinarse por
var argv = parseArgs(process.argv.slice(2))
const port = argv.port || argv.p || 3000;
console.log(`Listening on port ${port}...`)
//....listen(port);
y su valor predeterminado es 3000 si no se pasa ningún puerto como argumento.
Luego puede usar escuchar en la variable de port
.
La forma predeterminada de cambiar el puerto de escucha en The Express Framework es modificar el archivo llamado www en la carpeta bin.
Allí, encontrarás una línea como la siguiente
var port = normalizePort(process.env.PORT || ''3000'');
Cambia el valor 3000 a cualquier puerto que desees.
Esto es válido para la versión Express 4.13.1
La línea que encontró solo busca la variable de entorno PORT
, si está definida, la usa, de lo contrario utiliza el puerto predeterminado 3000
. Primero debe definir esta variable de entorno (no necesita ser root)
export PORT=8080
node <your-app.js>
Lo siguiente funciona si tienes algo como esto en tu app.js:
http.createServer(app).listen(app.get(''port''),
function(){
console.log("Express server listening on port " + app.get(''port''));
});
O bien codifique explícitamente su código para usar el puerto que desee, como:
app.set(''port'', process.env.PORT || 3000);
Este código significa establecer su puerto en la variable de entorno PORT
o, si undefined
está undefined
, configurarlo en el literal 3000
.
O use su entorno para configurar el puerto. Configurarlo a través del entorno se utiliza para ayudar a delinear entre PRODUCTION
y DEVELOPMENT
y también muchas Plataformas como Servicio usan el entorno para configurar el puerto de acuerdo con sus especificaciones, así como las configuraciones internas de Express. A continuación, establece un par clave de valor = valor y luego inicia su aplicación.
$ PORT=8080 node app.js
En referencia a su ejemplo de código, quiere algo como esto:
var express = require("express");
var app = express();
// sets port 8080 to default or unless otherwise specified in the environment
app.set(''port'', process.env.PORT || 8080);
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);
app.listen(app.get(''port''));
Noté que esto nunca se resolvió ... Es probable que tenga un firewall frente a su máquina bloqueando esos puertos, o que iptables está configurado para evitar el uso de esos puertos.
Intenta ejecutar nmap -F localhost cuando ejecutas tu aplicación (instala nmap si no la tienes). 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!
Prueba esto
$ PORT=8080 node app.js
Si quieres mostrar algo, estás conectado en 3000
var express = require(''express'')
var app = express()
app.get(''/'', function (req, res) {
res.send(''Hello World!'')
})
app.listen(3000, function () {
console.log(''Example app listening on port 3000!'')
})
Espero que te sea útil
Solo una nota para 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
Intenta ubicar la ubicación bin> www e intenta cambiar el número de puerto ...