Respuestas:
En muchos entornos (por ejemplo, Heroku), y como una convención, puede configurar la variable de entorno PORT
para decirle a su servidor web en qué puerto escuchar.
Eso process.env.PORT || 3000
significa: lo que sea que esté en la variable de entorno PORT, o 3000 si no hay nada allí.
Entonces, pasa eso app.listen
, o a app.set('port', ...)
, y eso hace que su servidor pueda aceptar un parámetro del entorno en qué puerto escuchar.
Si pasa 3000
codificado app.listen()
, siempre está escuchando en el puerto 3000, que puede ser adecuado para usted o no, según sus requisitos y los requisitos del entorno en el que está ejecutando su servidor.
si corres node index.js
, Node usará3000
Si ejecuta PORT=4444 node index.js
, Node utilizará process.env.PORT
cual es igual a 4444
en este ejemplo. Ejecutar con sudo
puertos inferiores a 1024.
Al alojar su aplicación en otro servicio (como Heroku, Nodejitsu y AWS), su host puede configurar la process.env.PORT
variable de forma independiente para usted; después de todo, su script se ejecuta en su entorno.
Elastic Beanstalk de Amazon hace esto. Si intenta establecer un valor de puerto estático como en 3000
lugar de process.env.PORT || 3000
donde 3000 es su configuración estática, entonces su aplicación generará un error de puerta de enlace 500 porque Amazon está configurando el puerto para usted.
Esta es una aplicación Express mínima que se implementará en Elastic Beanstalk de Amazon:
var express = require('express');
var app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
});
// use port 3000 unless there exists a preconfigured port
var port = process.env.port || 3000;
app.listen(port);
const {PORT = 3000} = process.env
En algunos escenarios, port
solo puede ser designado por el entorno y se guarda en una variable de entorno del usuario. A continuación se muestra cómo funcionan las aplicaciones node.js.
El process
objeto es un global que proporciona información y control sobre el proceso actual de Node.js. Como global, siempre está disponible para las aplicaciones Node.js sin usar require()
.
La process.env
propiedad devuelve un objeto que contiene el entorno del usuario.
Un ejemplo de este objeto se ve así:
{
TERM: 'xterm-256color',
SHELL: '/usr/local/bin/bash',
USER: 'maciej',
PATH: '~/.bin/:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin',
PWD: '/Users/maciej',
EDITOR: 'vim',
SHLVL: '1',
HOME: '/Users/maciej',
LOGNAME: 'maciej',
_: '/usr/local/bin/node'
}
Por ejemplo,
terminal : establece una nueva variable de entorno de usuario, no de forma permanente
export MY_TEST_PORT=9999
app.js : lea la nueva variable de entorno de la aplicación de nodo
console.log(process.env.MY_TEST_PORT)
terminal : ejecute la aplicación de nodo y obtenga el valor
$ node app.js
9999