Подтвердить что ты не робот

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);
4b9b3361

Ответ 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. Проверьте, так ли это.