Відповіді:
У багатьох середовищах (наприклад, Heroku), і як умова, ви можете встановити змінну середовища, PORT
щоб повідомити вашому веб-серверу, який порт потрібно слухати.
Отже, process.env.PORT || 3000
означає: що є в змінній середовища PORT, або 3000, якщо там нічого немає.
Таким чином, ви передаєте це app.listen
або до app.set('port', ...)
, і це робить ваш сервер здатним приймати параметр із середовища, який порт слухати.
Якщо ви передаєте 3000
жорсткий код app.listen()
, ви завжди слухаєте порт 3000, що може бути саме для вас, чи ні, залежно від ваших вимог та вимог середовища, в якому ви працюєте на своєму сервері.
якщо ви запустите node index.js
, Node використовуватиме3000
Якщо ви запустите PORT=4444 node index.js
, Node використовуватиме, process.env.PORT
що дорівнює 4444
в цьому прикладі. Запустіть sudo
для портів нижче 1024.
Під час розміщення вашої програми на іншій службі (наприклад, Heroku, Nodejitsu та AWS) ваш хост може самостійно налаштувати process.env.PORT
змінну для вас; зрештою, ваш сценарій працює в їх оточенні.
Amazo's Elastic Beanstalk робить це. Якщо ви спробуєте встановити значення статичного порту на зразок 3000
замість того, process.env.PORT || 3000
де 3000 є вашим статичним налаштуванням, тоді ваша програма призведе до помилки 500 шлюзу, оскільки Amazon налаштовує порт для вас.
Це мінімальний додаток Express, яке буде розгорнуто на Elastic Beanstalk 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
У деяких сценаріях port
може бути призначений лише середовищем і зберігається в змінній середовищі користувача. Нижче описано, як з ним працюють програми node.js.
process
Об'єкт є глобальним , який надає інформацію про, і контроль над, поточним процесом Node.js. Як глобальний, він завжди доступний для програм Node.js без використання require()
.
process.env
Властивість повертає об'єкт , що містить призначену для користувача середу.
Приклад цього об’єкта виглядає так:
{
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'
}
Наприклад,
термінал : встановлення нової змінної середовища користувача, а не постійно
export MY_TEST_PORT=9999
app.js : читайте нову змінну середовища з додатка вузла
console.log(process.env.MY_TEST_PORT)
термінал : запустіть додаток вузла і отримайте значення
$ node app.js
9999