¿Qué es process.env.PORT en Node.js?

175

¿Para qué se process.env.PORT || 3000utiliza en Node.js? Vi esto en alguna parte:

 app.set('port', process.env.PORT || 3000);

Si se usa para establecer 3000como puerto de escucha, ¿puedo usar esto en su lugar?

app.listen(3000);

Si no, ¿por qué?

usuario-S
fuente

Respuestas:

237

En muchos entornos (por ejemplo, Heroku), y como una convención, puede configurar la variable de entorno PORTpara decirle a su servidor web en qué puerto escuchar.

Eso process.env.PORT || 3000significa: 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 3000codificado 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.

Nitzan Shaked
fuente
74
  • si corres node index.js, Node usará3000

  • Si ejecuta PORT=4444 node index.js, Node utilizará process.env.PORTcual es igual a 4444en este ejemplo. Ejecutar con sudopuertos inferiores a 1024.

Abdennour TOUMI
fuente
13
Si está utilizando esto en la máquina de Windows, primero deberá configurar la variable PORT como "set PORT = 3300", luego en el siguiente comando, si ejecuta el nodo server.js, tomará el puerto como 3300 en lugar de 3000 .
Aakash Jain
35

Al alojar su aplicación en otro servicio (como Heroku, Nodejitsu y AWS), su host puede configurar la process.env.PORTvariable 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 3000lugar de process.env.PORT || 3000donde 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);
ThisClark
fuente
1
Dentro de Node.js que admite ES6 puedes escribir aún más corto:const {PORT = 3000} = process.env
Julian
1
@PENSILVANIA. no PA, si se encuentra process.env.port en el entorno de producción para que el puerto obtenga el valor. Recuerde que esta operación se leerá de izquierda a derecha y se detendrá en el primer valor disponible, si lo hay.
HoCo_
11

En algunos escenarios, portsolo 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 processobjeto 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.envpropiedad 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
campo temático
fuente