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?
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?
Odpowiedzi:
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.
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.
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);
const {PORT = 3000} = process.env
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