do czego process.env.PORT || 3000
służy w Node.js? Widziałem to gdzieś:
app.set('port', process.env.PORT || 3000);
Jeśli jest używany 3000
jako port nasłuchujący, czy mogę go zamiast tego użyć?
app.listen(3000);
Jeśli nie, dlaczego?
do czego process.env.PORT || 3000
służy w Node.js? Widziałem to gdzieś:
app.set('port', process.env.PORT || 3000);
Jeśli jest używany 3000
jako port nasłuchujący, czy mogę go zamiast tego użyć?
app.listen(3000);
Jeśli nie, dlaczego?
Odpowiedzi:
W wielu środowiskach (np. Heroku) i zgodnie z konwencją, możesz ustawić zmienną środowiskową, PORT
aby poinformować serwer WWW, na jakim porcie ma nasłuchiwać.
To process.env.PORT || 3000
znaczy: cokolwiek jest w zmiennej środowiskowej PORT lub 3000, jeśli nic tam nie ma.
Więc przekazujesz to app.listen
lub 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 3000
zakodowane 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.
jeśli uruchomisz node index.js
, Node użyje3000
Jeśli uruchomisz PORT=4444 node index.js
, Node użyje tego, process.env.PORT
co 4444
w tym przykładzie jest równe . Uruchom z sudo
portami poniżej 1024.
Podczas hostowania aplikacji w innej usłudze (takiej jak Heroku, Nodejitsu i AWS), Twój host może niezależnie skonfigurować process.env.PORT
zmienną 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 3000
zamiast tego, process.env.PORT || 3000
gdzie 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);
const {PORT = 3000} = process.env
W niektórych scenariuszach port
moż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.
process
Obiekt 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.env
Wł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