O que é process.env.PORT no Node.js?

175

para que é process.env.PORT || 3000usado o Node.js? Eu vi isso em algum lugar:

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

Se for usado para definir 3000como a porta de escuta, posso usar isso?

app.listen(3000);

Se não, por quê?

Comercial
fonte

Respostas:

237

Em muitos ambientes (por exemplo, Heroku), e como convenção, você pode definir a variável de ambiente PORTpara informar ao servidor da Web em que porta ouvir.

O que process.env.PORT || 3000significa: o que estiver na variável de ambiente PORT, ou 3000, se não houver nada lá.

Então você passa isso app.listen, ou para app.set('port', ...), e isso torna seu servidor capaz de aceitar um parâmetro do ambiente em qual porta escutar.

Se você passa 3000o código embutido app.listen(), está sempre ouvindo na porta 3000, o que pode ser apenas para você, ou não, dependendo de seus requisitos e dos requisitos do ambiente em que você está executando seu servidor.

Nitzan Shaked
fonte
74
  • se você executar node index.js, o Node usará3000

  • Se você executar PORT=4444 node index.js, o Node usará o process.env.PORTque é igual a 4444neste exemplo. Execute com sudoportas abaixo de 1024.

Abdennour TOUMI
fonte
13
Se você estiver usando isso na máquina Windows, primeiro precisará definir a variável PORT como "set PORT = 3300" e, no próximo comando, se você executar o nó server.js, a porta será 3300 em vez de 3000 .
Aakash Jain
35

Ao hospedar seu aplicativo em outro serviço (como Heroku, Nodejitsu e AWS), seu host pode configurar independentemente o process.env.PORT variável para você; afinal, seu script é executado no ambiente deles.

O Elastic Beanstalk da Amazon faz isso. Se você tentar definir um valor de porta estática como em 3000vez de process.env.PORT || 3000onde 3000 é sua configuração estática, seu aplicativo resultará em um erro de gateway 500 porque a Amazon está configurando a porta para você.

Este é um aplicativo Express mínimo que será implantado no Elastic Beanstalk da 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
fonte
1
No Node.js que suporta o ES6, você pode escrever ainda mais:const {PORT = 3000} = process.env
Julian
1
@PA. sem PA, se process.env.port for encontrado no ambiente de produção, para que a porta obtenha o valor dela. Lembre-se de que esta operação será lida da esquerda para a direita e será interrompida no primeiro valor disponível, se houver.
21318 HoCo_
11

Em alguns cenários, port só pode ser designado pelo ambiente e é salvo em uma variável de ambiente do usuário. Abaixo está como os aplicativos node.js funcionam com ele.

O processobjeto é um global que fornece informações e controle sobre o processo atual do Node.js. Como global, está sempre disponível para aplicativos Node.js sem usarrequire() .

o process.env propriedade retorna um objeto que contém o ambiente do usuário.

Um exemplo desse objeto se parece com:

{
  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 exemplo,

terminal : define uma nova variável de ambiente do usuário, não permanentemente

export MY_TEST_PORT=9999

app.js : leia a nova variável de ambiente no aplicativo do nó

console.log(process.env.MY_TEST_PORT)

terminal : execute o aplicativo do nó e obtenha o valor

$ node app.js
9999
themefield
fonte