Node.js/Express.js Приложение работает только на Port 3000
У меня есть приложение 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/экспресс-приложение)
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);
Ответы
Ответ 1
Следующее работает, если в вашем приложении app.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
, а также множество платформ в качестве службы используют среду для установки порта в соответствии со своими спецификациями, а также с внутренними конфигурациями Express. Следующее задает пару ключа среды = значение, а затем запускает ваше приложение.
$ 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'));
Ответ 2
В bin/www
есть строка:
var port = normalizePort(process.env.PORT || '3000');
Попробуйте изменить его.
Ответ 3
Попробуйте это
$ PORT=8080 node app.js
Ответ 4
По умолчанию для изменения порта прослушивания в платформе Express используется модификация файла с именем www в папке bin.
Там вы найдете строку, такую как
var port = normalizePort(process.env.PORT || '3000');
Измените значение 3000 на любой желаемый порт.
Это справедливо для Express версии 4.13.1
Ответ 5
![Refer to this link.]()
Попытайтесь найти местоположение корзины> www и попробуйте изменить номер порта...
Ответ 6
В последней версии кода с экспресс-генератором (4.13.1) app.js является экспортированным модулем, а сервер запускается в /bin/www с помощью app.set('port', process.env.PORT | | 3001) в app.js будет переопределено аналогичным утверждением в bin/www.
Я просто изменил оператор в bin/www.
Ответ 7
Просто заметьте для пользователей Mac OS X и Linux:
Если вы хотите запустить приложение Node/Express с номером порта ниже 1024, вы должны запускаться как суперпользователь:
sudo PORT=80 node app.js
Ответ 8
Найденная строка просто ищет переменную окружения PORT
, если она определяет, что она ее использует, в противном случае используется порт по умолчанию 3000
. Сначала вы должны определить эту переменную окружения (не нужно быть root)
export PORT=8080
node <your-app.js>
Ответ 9
Если вы хотите показать что-то, что вы подключили на 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!')
})
Я надеюсь, что это будет полезно для вас.
Ответ 10
Отмечено, что это никогда не было разрешено... Вероятно, у вас есть брандмауэр перед вашей машиной, блокирующий эти порты, или iptables настроен на предотвращение использования этих портов.
Попробуйте запустить nmap -F localhost при запуске приложения (установите nmap, если у вас его нет). Если кажется, что вы используете приложение на нужном порту, и вы не можете получить к нему доступ через удаленный браузер, тогда есть некоторое промежуточное ПО или физический брандмауэр, блокирующий порт.
Надеюсь, это поможет!
Ответ 11
Отвечайте в соответствии с текущей версией выражения
Если вы расскажете о текущей версии express, если вы запустите app.listen()
, чтобы начать прослушивание без указания порта, Express выберет случайный порт для вашего приложения, чтобы узнать, какой порт он использует при запуске
app.listen(0, () => {
console.log(app.address().port)
}
должен выводить порт вашего app
. Более того, первый параметр 0
можно полностью игнорировать, но не рекомендуется
Ответ 12
В app.js просто добавьте...
process.env.PORT=2999;
Это изолирует переменную PORT для экспресс-приложения.
Ответ 13
Убедитесь, что вы работаете из этой папки вашего приложения, где у вас есть package.json.
Ответ 14
Я использую пакет minimist
и аргументы запуска узла для управления портом.
node server.js --port 4000
или же
node server.js -p 4000
Внутри server.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 для переменной port
.
Ответ 15
Я думаю, что лучший способ - использовать пакет dotenv и установить порт в конфигурационном файле .env
без изменения файла www
внутри bin
папки.
Просто установите пакет с помощью команды:
npm install dotenv
требует это в вашем приложении:
require('dotenv').config()
Создайте файл .env в корневом каталоге вашего проекта и добавьте в него порт (например), чтобы прослушивать порт 5000
PORT=5000
и что это.
Больше информации здесь
Ответ 16
Если вы используете Nodemon, я предполагаю, что PORT 3000 установлен в nodemonConfig. Проверьте, так ли это.