Узел.js / Express.js приложение работает только на Порту 3000
у меня есть узел.js / Express.приложение на JS работает на моем сервере, который работает только на порту 3000, и я пытаюсь выяснить, почему. Вот что я нашел:
- без указания порта (
app.listen()
), приложение работает, но веб-страница не загружается. - на порту 3001 (
app.listen(3001)
) или любой другой порт, который не используется, приложение работает, но веб-страница не загружается. - порт 2999, приложение выдает ошибку, потому что что-то еще использует порт.
- на порту 3000 приложение запускается, и веб-страница загружается нормально.
Я знаю, что экспресс-приложения по умолчанию для порта 3000. Но как ни странно, мое приложение работает только тогда, когда я явно заставляю его работать на порту 3000 (app.listen(3000)
).
Я нашел это на линии 220 из /usr/bin/express
:
app.set('port', process.env.PORT || 3000);
который делает, как указано ранее: установка порта на то, что указано или 3000, если ничего не указано.
как я могу заставить мое приложение работать на другом порту например 8080 или 3001?
спасибо!
Изменить: Пример Кода (Очень Простой Узел/Экспресс-Приложение)
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);
14 ответов:
следующие работы, если у вас есть что-то подобное в вашем приложении.js:
http.createServer(app).listen(app.get('port'), function(){ console.log("Express server listening on port " + app.get('port')); });
либо явно жестко Закодируйте свой код, чтобы использовать нужный порт, например:
app.set('port', process.env.PORT || 3000);
этот код означает, что ваш порт установлен в переменную окружения
PORT
или, если этоundefined
затем установите его в буквальном3000
.или используйте свою среду для установки порта. Установка его через среду используется, чтобы помочь разграничить между
PRODUCTION
иDEVELOPMENT
а также большое Платформы как сервис используют среду для установки порта в соответствии с их спецификациями, а также внутренними Экспресс-конфигурациями. Ниже задается пара ключ среды=значение, а затем запускается приложение.$ PORT=8080 node app.js
в отношении вашего примера кода, Вы хотите что-то вроде этого:
var express = require("express"); var app = express(); // sets port 8080 to default or unless otherwise specified in the environment app.set('port', process.env.PORT || 8080); 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); app.listen(app.get('port'));
на
bin/www
, есть строка:var port = normalizePort(process.env.PORT || '3000');
попробуйте изменить его.
способ по умолчанию изменить порт прослушивания в Express framework-это изменить файл с именем www в папке bin.
там вы найдете строку, например
var port = normalizePort(process.env.PORT || '3000');
измените значение 3000 на любой порт, который вы хотите.
это действительно для экспресс версии 4.13.1
в последней версии кода с приложением express-generator (4.13.1).js-это экспортированный модуль, и сервер запускается в /bin/www с помощью приложения.set ('port', process.ОКР.Порт | / 3001) в приложении.js будет переопределен аналогичным заявлением в bin / www. Я просто изменил заявление в bin / www.
просто примечание для пользователей Mac OS X и Linux:
Если вы хотите запустить приложение Node / Express на номер порта ниже 1024, вы должны работать как суперпользователь:
sudo PORT=80 node app.js
строка, которую вы нашли, просто ищет переменную окружения
PORT
, если он определен, он использует его, в противном случае использует порт по умолчанию3000
. Вы должны сначала определить эту переменную среды (не нужно быть root)export PORT=8080 node <your-app.js>
Если вы хотите показать что-то, что вы подключены на 3000
var express = require('express') var app = express() app.get('/', function (req, res) { res.send('Hello World!') }) app.listen(3000, function () { console.log('Example app listening on port 3000!') })
Я надеюсь, что будет полезно для вас
заметил, что это никогда не было решено... У вас, вероятно, есть брандмауэр перед вашей машиной, блокирующий эти порты, или iptables настроен для предотвращения использования этих портов.
попробуйте запустить Nmap-F localhost при запуске приложения (установите nmap, если у вас его нет). Если кажется, что вы запускаете приложение на правильном Порту, и вы не можете получить доступ к нему через удаленный браузер, то есть некоторое промежуточное программное обеспечение или физический брандмауэр, который блокирует порт.
надеюсь, что это помогает!
ответ согласно текущая версия express
если вы говорите о текущая версия express, если вы запустите
app.listen()
чтобы начать прослушивание без указания порта, Express выберет случайный порт для вашего приложения, чтобы узнать о том, какой порт он в настоящее время работает на Использоватьapp.listen(0, () => { console.log(app.address().port) }
должны выход в порт вашего
app
. Тем более что первый параметр0
можно полностью игнорировать, но это не рекомендуется
я использую
minimist
пакет и аргументы запуска узла для управления портом.
node server.js --port 4000
или
node server.js -p 4000
внутри сервера.js, порт может быть определен с помощью
var argv = parseArgs(process.argv.slice(2)) const port = argv.port || argv.p || 3000; console.log(`Listening on port ${port}...`) //....listen(port);
и он по умолчанию 3000, если порт не передается в качестве аргумента.
затем вы можете использовать listen on the
port
переменной.