Respostas:
Em muitos ambientes (por exemplo, Heroku), e como convenção, você pode definir a variável de ambiente PORT
para informar ao servidor da Web em que porta ouvir.
O que process.env.PORT || 3000
significa: 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 3000
o 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.
se você executar node index.js
, o Node usará3000
Se você executar PORT=4444 node index.js
, o Node usará o process.env.PORT
que é igual a 4444
neste exemplo. Execute com sudo
portas abaixo de 1024.
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 3000
vez de process.env.PORT || 3000
onde 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);
const {PORT = 3000} = process.env
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 process
objeto é 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