У меня на сервере работает приложение Node.js / Express.js, которое работает только на порте 3000, и я пытаюсь понять, почему. Вот что я нашел:
- Без указания порта (
app.listen()
) приложение запускается, но веб-страница не загружается. - На порте 3001 (
app.listen(3001)
) или любом другом неиспользуемом порту приложение запускается, но веб-страница не загружается. - На порте 2999 приложение выдает ошибку, потому что что-то другое использует этот порт.
- На порту 3000 приложение запускается и веб-страница загружается нормально.
Я знаю, что приложения Express по умолчанию используют порт 3000. Но, как ни странно, мое приложение запускается только тогда, когда я явно заставляю его работать на порту 3000 ( app.listen(3000)
).
Я нашел это в строке 220 /usr/bin/express
:
app.set(\'port\', process.env.PORT || 3000);
Что делает, как указано ранее: установка порта на то, что указано, или на 3000, если ничего не указано.
Как я могу заставить мое приложение работать на другом порту, например 8080 или 3001?
Спасибо!
Изменить: образец кода (очень простое приложение Node / Express)
var express = require("express");
var app = express();
app.get('/', function(req, res){
res.send('hello world');
});
// Only works on 3000 regardless of what I set environment port to or how I set [value] in app.set('port', [value]).
app.listen(3000);
javascript
node.js
configuration
express
port
Бенджамин Мартин
источник
источник
port
требуется.listen()
, так что вы не должны пытаться идти без. 2) Возникают ли ошибки при запуске приложения? Или это просто кажется недоступным из браузера? 3) Вы пытаетесь получить доступ к веб - сайт на одной машине сlocalhost:3000
,localhost:3001
и т.д.? Если вы используете две машины, один клиент и один сервер, вам необходимо добавить исключения в брандмауэр на сервере, чтобы разрешить Node получать запросы от клиента..listen()
. Выше, когда я говорю «приложение запускается», это то же самое, что вы говорите «без ошибок при запуске приложения». Когда я говорю «веб-страница не загружается», это то же самое, что вы говорите «недоступна из браузера». Весь доступ с одной машины (моего сервера). Спасибо за ответ.$ supervisor app.js
или$ PORT=[PORT] node app.js
когда хочу установить переменную порта среды. Я выложу образец кода.Ответы:
Следующее работает, если у вас есть что-то подобное в вашем app.js:
Либо явно закодируйте свой код, чтобы использовать нужный порт, например:
Этот код означает, что для вашего порта нужно указать переменную окружения
PORT
или, если она,undefined
то установить его в литерал3000
.Или используйте свою среду для установки порта. Настройка его с помощью среды используется , чтобы помочь разграничить между
PRODUCTION
и ,DEVELOPMENT
а также множеством платформ , как служба использовать окружающую среду для установки порта в соответствии с их спецификациями, а также внутренней конфигой Express. Следующее устанавливает пару ключ = значение среды, а затем запускает ваше приложение.Что касается вашего примера кода, вам нужно что-то вроде этого:
источник
app.set()
код в свое приложение и изменил 3000 на 8080. Все еще работаетapp.listen(3000)
. 2. Измените переменную порта среды на 8080 при запуске приложения узла. Еще только работаетapp.listen(3000)
. 3. Перешел в / usr / bin / express (строка 220) и изменил 3000 на 8080. По-прежнему работает только наapp.listen(3000)
. Спасибо за информативный пост. Мне нужно что-то перезапустить? Экспресс не может быть перезапущен из того, что я могу сказать, и перезапуск приложения Node происходит каждый раз, когда я использую,node app.js.
node app.js
запустит простой (я лично используюnodemon
при разработке и тестировании. Возможно, вы думаете оexpress
исполняемом файле командной строки, который является вспомогательным процессом, который строит ваш скелет. файловая структура. Можете ли вы опубликовать суть своего кода?nodemon
в сочетании с,nohup
чтобы мое приложение работало бесконечно. Я не использую исполняемую версию CL,express
поэтому она должна перезапускаться каждый раз, когда я перезапускаю своеnode
приложение. См. Мой исходный пост для редактирования с кодом. Спасибо!В
bin/www
, есть строка:Попробуй его модифицировать.
источник
Попробуй это
источник
Попробуйте найти bin> www и попробуйте изменить номер порта ...
источник
По умолчанию способ изменить порт прослушивания в платформе Express - это изменить файл с именем www в папке bin.
Там вы найдете такую строку, как следующая
Измените значение 3000 на любой желаемый порт.
Это действительно для Express версии 4.13.1.
источник
Просто примечание для пользователей Mac OS X и Linux:
Если вы хотите запустить приложение Node / Express на порту ниже 1024, вам нужно запустить его как суперпользователь:
sudo PORT=80 node app.js
источник
В последней версии кода с экспресс-генератором (4.13.1) app.js - это экспортированный модуль, а сервер запускается в / bin / www с помощью app.set ('port', process.env.PORT || 3001) в app.js будет заменен аналогичным оператором в bin / www. Я только что изменил инструкцию в bin / www.
источник
Заметил, что это так и не было решено ... Вероятно, перед вашей машиной стоит брандмауэр, блокирующий эти порты, или iptables настроен для предотвращения использования этих портов.
Попробуйте запустить nmap -F localhost при запуске приложения (установите nmap, если у вас его нет). Если кажется, что вы запускаете приложение на правильном порту и не можете получить к нему доступ через удаленный браузер, значит, есть промежуточное программное обеспечение или физический брандмауэр, который блокирует порт.
Надеюсь это поможет!
источник
Найденная вами строка просто ищет переменную окружения
PORT
, если она определена, она использует ее, в противном случае использует порт по умолчанию3000
. Сначала вы должны определить эту переменную среды (не обязательно быть root)источник
Если вы хотите показать что-то, что подключено к 3000
Я надеюсь, что это будет вам полезно
источник
Ответ по актуальной версии экспресс
Если вы говорите о текущей версии Express , если вы запустите,
app.listen()
чтобы начать прослушивание, не указывая порт, Express выберет случайный порт для вашего приложения, чтобы узнать, какой порт он в настоящее время работает.Должен ли выход порт из ваших
app
. Более того, этот первый параметр0
можно полностью игнорировать, но это не рекомендуется.источник
Убедитесь, что вы работаете из той папки вашего приложения, где у вас есть package.json.
источник
Я использую
minimist
пакет и аргументы запуска узла для управления портом.node server.js --port 4000
или
node server.js -p 4000
Внутри server.js порт можно определить с помощью
и по умолчанию 3000, если порт не передан в качестве аргумента.
Затем вы можете использовать прослушивание
port
переменной.источник
В app.js просто добавьте ...
Это изолирует переменную PORT от экспресс-приложения.
источник
Я думаю, что лучший способ - использовать пакет dotenv и установить порт в
.env
файле конфигурации, не изменяя файлwww
внутри папкиbin
.Просто установите пакет с помощью команды:
требовать это в своем приложении:
Создайте файл .env в корневом каталоге вашего проекта и добавьте в него порт (например) для прослушивания порта 5000
и это все.
Больше информации здесь
источник
Если вы используете Nodemon, я предполагаю, что PORT 3000 установлен в nodemonConfig. Проверьте, так ли это.
источник