Узел.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 72

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');

попробуйте изменить его.

попробуй такое

$ PORT=8080 node app.js

способ по умолчанию изменить порт прослушивания в 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 можно полностью игнорировать, но это не рекомендуется

убедитесь, что вы запускаете из этой папки вашего приложения, где у вас есть пакет.формат JSON.

Refer to this link.

попробуйте найти bin>www расположение и попробуйте изменить номер порта...

я использую 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 переменной.

в приложение.js, просто добавь...

process.env.PORT=2999;

это изолирует переменную порта для экспресс-приложения.