Что такое процесс.env.Порт в узле.Яш?

что это process.env.PORT || 3000 используется для In Node.Яш? Я видел это где-то:

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

если он используется для установки 3000 как порт прослушивания, могу ли я использовать это вместо этого?

app.listen(3000);

если нет то почему?

4 ответов


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

так process.env.PORT || 3000 означает: все, что находится в порту переменной среды, или 3000, если там ничего нет.

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

если вы передадите 3000 жестко app.listen(), вы всегда слушаете порт 3000, который может быть только для вас или нет, в зависимости от ваших требований и требований среды, в которой вы используете свой сервер.


  • если вы запустите node index.js ,узел будет использовать 3000

  • если вы запустите PORT=4444 node index.js, узел будет использовать process.env.PORT что составляет 4444 в этом примере. Беги с sudo для портов ниже 1024.


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

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

это минимальное Экспресс-приложение, которое будет развертываться на эластичном бобовом стебле 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);

в некоторых случаях port может быть обозначен только средой и сохраняется в переменной среды пользователя. Ниже показано, как node.приложения js работают с ним.

на process объект является глобальным, который предоставляет информацию о текущем узле и управляет им.процесс Яш. Как глобальный, он всегда доступен для 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: прочитайте новую переменную среды из node app

console.log(process.env.MY_TEST_PORT)

терминал: запустите приложение узла и получите значение

$ node app.js
9999