Co to jest process.env.PORT w Node.js?

175

do czego process.env.PORT || 3000służy w Node.js? Widziałem to gdzieś:

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

Jeśli jest używany 3000jako port nasłuchujący, czy mogę go zamiast tego użyć?

app.listen(3000);

Jeśli nie, dlaczego?

użytkownik-S
źródło

Odpowiedzi:

237

W wielu środowiskach (np. Heroku) i zgodnie z konwencją, możesz ustawić zmienną środowiskową, PORTaby poinformować serwer WWW, na jakim porcie ma nasłuchiwać.

To process.env.PORT || 3000znaczy: cokolwiek jest w zmiennej środowiskowej PORT lub 3000, jeśli nic tam nie ma.

Więc przekazujesz to app.listenlub do app.set('port', ...), a to sprawia, że ​​twój serwer może zaakceptować parametr ze środowiska, na którym porcie nasłuchiwać.

Jeśli przejdziesz 3000zakodowane na stałe app.listen(), zawsze słuchasz na porcie 3000, który może być tylko dla Ciebie lub nie, w zależności od Twoich wymagań i wymagań środowiska, w którym uruchamiasz serwer.

Nitzan Shaked
źródło
74
  • jeśli uruchomisz node index.js, Node użyje3000

  • Jeśli uruchomisz PORT=4444 node index.js, Node użyje tego, process.env.PORTco 4444w tym przykładzie jest równe . Uruchom z sudoportami poniżej 1024.

Abdennour TOUMI
źródło
13
Jeśli używasz tego na komputerze z systemem Windows, najpierw musisz ustawić zmienną PORT na "set PORT = 3300", a następnie w następnym poleceniu, jeśli uruchomisz node server.js, przyjmie port jako 3300 zamiast 3000 .
Aakash Jain
35

Podczas hostowania aplikacji w innej usłudze (takiej jak Heroku, Nodejitsu i AWS), Twój host może niezależnie skonfigurować process.env.PORTzmienną za Ciebie; w końcu twój skrypt działa w ich środowisku.

Robi to Elastic Beanstalk firmy Amazon. Jeśli spróbujesz ustawić wartość portu statycznego, na przykład 3000zamiast tego, process.env.PORT || 3000gdzie 3000 jest ustawieniem statycznym, aplikacja spowoduje błąd bramy 500, ponieważ Amazon konfiguruje port za Ciebie.

To jest minimalna aplikacja Express, która zostanie wdrożona na Elastic Beanstalk firmy 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
źródło
1
W Node.js obsługującym ES6 możesz pisać jeszcze krócej:const {PORT = 3000} = process.env
Julian
1
@ROCZNIE. brak PA, jeśli process.env.port zostanie znaleziony w środowisku produkcyjnym, więc port uzyska jego wartość. Pamiętaj, że ta operacja zostanie odczytana od lewej do prawej i zatrzyma się na pierwszej dostępnej wartości, jeśli taka istnieje.
HoCo_
11

W niektórych scenariuszach portmoże być wyznaczony tylko przez środowisko i jest zapisywany w zmiennej środowiskowej użytkownika. Poniżej opisano, jak działają z nim aplikacje node.js.

processObiekt jest globalnym, która dostarcza informacji na temat oraz kontroli nad bieżący proces node.js. Jako globalny, jest zawsze dostępny dla aplikacji Node.js bez użycia require().

process.envWłasność zwraca obiekt zawierający środowisko użytkownika.

Przykład tego obiektu wygląda następująco:

{
  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'
}

Na przykład,

terminal : ustaw nową zmienną środowiskową użytkownika, nie na stałe

export MY_TEST_PORT=9999

app.js : przeczytaj nową zmienną środowiskową z aplikacji node

console.log(process.env.MY_TEST_PORT)

terminal : uruchom aplikację node i pobierz wartość

$ node app.js
9999
pole tematyczne
źródło