Відповіді:
У багатьох середовищах (наприклад, 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