Что такое 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 как «set PORT = 3300», затем в следующей команде, если вы запустите узел server.js, он примет порт как 3300 вместо 3000 .
Aakash Jain

35

Размещая ваше приложение в другом сервисе (например, Heroku, Nodejitsu и AWS), ваш хост может самостоятельно настроить process.env.PORTпеременную для вас; в конце концов, ваш скрипт работает в их среде.

Эластичный бобовый стебель Amazon делает это. Если вы попытаетесь установить статическое значение порта, например, 3000вместо process.env.PORT || 30003000, где ваши статические настройки, то ваше приложение приведет к ошибке 500 шлюзов, потому что Amazon настраивает порт для вас.

Это минимальное приложение Express, которое будет развернуто на Amazon Elastic Beanstalk:

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
Julian

1
@PA. нет 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.