Що таке process.env.PORT у Node.js?


175

для чого process.env.PORT || 3000використовується Node.js? Я десь це бачив:

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

Якщо він використовується для встановлення 3000в якості порту прослуховування, чи можу я використовувати це замість цього?

app.listen(3000);

Якщо ні, чому?

Відповіді:


237

У багатьох середовищах (наприклад, Heroku), і як умова, ви можете встановити змінну середовища, PORTщоб повідомити вашому веб-серверу, який порт потрібно слухати.

Отже, process.env.PORT || 3000означає: що є в змінній середовища PORT, або 3000, якщо там нічого немає.

Таким чином, ви передаєте це app.listenабо до app.set('port', ...), і це робить ваш сервер здатним приймати параметр із середовища, який порт слухати.

Якщо ви передаєте 3000жорсткий код app.listen(), ви завжди слухаєте порт 3000, що може бути саме для вас, чи ні, залежно від ваших вимог та вимог середовища, в якому ви працюєте на своєму сервері.


74
  • якщо ви запустите node index.js, Node використовуватиме3000

  • Якщо ви запустите PORT=4444 node index.js, Node використовуватиме, process.env.PORTщо дорівнює 4444в цьому прикладі. Запустіть sudoдля портів нижче 1024.


13
Якщо ви використовуєте це в машині Windows, спочатку вам доведеться встановити змінну PORT як "встановити PORT = 3300", а потім у наступній команді, якщо ви запустили node server.js, він прийме порт як 3300 замість 3000 .
Аакаш Джайн

35

Під час розміщення вашої програми на іншій службі (наприклад, 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);

1
У Node.js, що підтримує ES6, ви можете написати ще коротше:const {PORT = 3000} = process.env
Джуліан

1
@PA. немає ПА, якщо process.env.port знайдено у виробничому середовищі, тому порт отримає його значення. Пам'ятайте, що ця операція буде прочитана зліва направо і зупиниться на першому доступному значенні, якщо воно є.
HoCo_

11

У деяких сценаріях 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.