2013-09-18 3 views
94

Что такое process.env.PORT || 3000 в Node.js? Я видел это где-то:Что такое process.env.PORT в Node.js?

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

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

app.listen(3000); 

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

ответ

138

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

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

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

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

16

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

Эластичный бобовый нож Amazon делает это. Если вы попытаетесь установить значение статического порта, например 3000, а не process.env.PORT || 3000, где 3000 - ваша статическая настройка, то ваше приложение приведет к ошибке 500 шлюза, потому что 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); 
+0

журнал всегда будет говорить «слушать порт 3000» даже при прослушивании других портов. –

+0

Внутри Node.js, поддерживающих ES6, вы можете писать еще короче: 'const {PORT = 3000} = process.env' – Julian

+1

@PA. нет PA, если process.env.port находится в производственной среде, поэтому порт получит значение. Помните, что эта операция будет считываться слева направо и останавливаться при первом доступном значении, если таковое имеется. –

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

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

+6

Если вы используете это в Windows-машине, сначала вам нужно будет установить переменную PORT как «set PORT = 3300», а затем в следующей команде, если вы запустите узел server.js, он займет порт как 3300 вместо 3000. –

+0

PORT не распознается как внутренняя или внешняя команда. – Deep

Смежные вопросы