Węzeł.js / Express.aplikacja js działa tylko na porcie 3000

Mam węzeł.js / Express.aplikacja js działa na moim serwerze, która działa tylko na porcie 3000 i próbuję dowiedzieć się dlaczego. Oto co znalazłem:

  • bez podania portu (app.listen()), Aplikacja uruchamia się, ale strona internetowa nie ładuje się.
  • na porcie 3001 (app.listen(3001)) lub innym porcie, który nie jest używany, aplikacja uruchamia się, ale strona internetowa nie ładuje się.
  • na porcie 2999, aplikacja wyświetla błąd, ponieważ coś innego używa tego portu.
  • na porcie 3000 aplikacja działa i strona ładuje się dobrze.

Wiem, że Express apps domyślnie ustawia port 3000. Ale o dziwo, moja aplikacja działa tylko wtedy, gdy wyraźnie sprawiają, że działa na porcie 3000 (app.listen(3000)).

Znalazłem to na linii 220 z /usr/bin/express:

app.set(\'port\', process.env.PORT || 3000);

Co robi jak poprzednio: ustawia port na określony lub na 3000 jeśli nic nie jest określone.

Jak mogę sprawić, by moja aplikacja działała na innym porcie, takim jak 8080 lub 3001?

Dzięki!

Edycja: Próbka Kodu (Bardzo Prosta Node / Express App)

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);
Author: Benjamin Martin, 2013-08-02

14 answers

Następujące działania, jeśli masz coś takiego w swojej aplikacji.js:

http.createServer(app).listen(app.get('port'),
  function(){
    console.log("Express server listening on port " + app.get('port'));
});

Albo jawnie Zakoduj kod, aby użyć portu, który chcesz, jak:

app.set('port', process.env.PORT || 3000);

Ten kod oznacza ustawienie portu na zmienną środowiskową PORT lub jeśli jest to undefined, to ustaw go na literał 3000.

Lub użyj środowiska, aby ustawić port. Ustawienie go za pomocą środowiska służy do wyznaczania pomiędzy PRODUCTION i DEVELOPMENT, a także wiele platform jako usług korzysta ze środowiska do Ustaw port zgodnie z ich specyfikacją, a także wewnętrznymi konfiguracjami Express. Poniżej ustawia parę environment klucz=wartość, a następnie uruchamia aplikację.

$ PORT=8080 node app.js

W nawiązaniu do twojego przykładu kodu, chcesz coś takiego:

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'));
 87
Author: EhevuTov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-20 19:43:07

W bin/www znajduje się linia:

var port = normalizePort(process.env.PORT || '3000');

Spróbuj go zmodyfikować.

 19
Author: Larry Lu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-07 02:28:51

Spróbuj tego

$ PORT=8080 node app.js
 12
Author: John Williams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-02 04:09:16

Domyślnym sposobem zmiany portu nasłuchu w frameworku Express jest modyfikacja pliku o nazwie www w folderze bin.

Tam znajdziesz taki wiersz jak poniżej

var port = normalizePort(process.env.PORT || '3000');

Zmień wartość 3000 na dowolny port.

Dotyczy wersji Express 4.13.1

 9
Author: AliAvci,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-17 17:12:47

W najnowszej wersji kodu z aplikacją express-generator (4.13.1).js jest wyeksportowanym modułem, a serwer jest uruchamiany w /bin/www za pomocą aplikacji.set ('port', process.env.PORT || 3001) w aplikacji.js zostanie nadpisane przez podobne oświadczenie w bin / www. Właśnie zmieniłem wypowiedź w bin / www.

 4
Author: user1276682,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-17 16:47:21

Tylko uwaga dla użytkowników Mac OS X i Linuksa:

Jeśli chcesz uruchomić aplikację Node / Express na porcie o numerze niższym niż 1024, musisz uruchomić ją jako superużytkownik: sudo PORT=80 node app.js

 3
Author: user3711307,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-11-10 14:35:39

Znaleziona linia szuka zmiennej środowiskowej PORT, jeśli jest zdefiniowana, używa jej, w przeciwnym razie używa domyślnego portu 3000. Musisz najpierw zdefiniować tę zmienną środowiskową (nie musisz być root)

export PORT=8080
node <your-app.js>
 2
Author: dinigo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-04 09:12:22

Jeśli chcesz pokazać coś jesteś podłączony na 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!')
})

Mam nadzieję, że to ci pomoże

 2
Author: MEAbid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-29 14:30:43

Zauważyłem, że to nigdy nie zostało rozwiązane... Prawdopodobnie masz zaporę przed komputerem blokującą te porty lub iptables jest skonfigurowany, aby uniemożliwić korzystanie z tych portów.

Spróbuj uruchomić Nmap-F localhost podczas uruchamiania aplikacji (zainstaluj nmap, jeśli go nie masz). Jeśli wydaje się, że używasz aplikacji na odpowiednim porcie i nie możesz uzyskać do niej dostępu za pośrednictwem zdalnej przeglądarki, istnieje oprogramowanie pośredniczące lub fizyczna zapora ogniowa, która blokuje ten port.

Mam nadzieję, że to pomoże!

 1
Author: user2855232,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-07 15:16:10

Odpowiedź według aktualna wersja express

Jeśli mówisz o aktualna wersja express, jeśli biegniesz app.listen() aby rozpocząć nasłuchiwanie bez podania portu, Express wybierze random port dla Twojej aplikacji, aby dowiedzieć się, który port jest aktualnie uruchomiony na use

app.listen(0, () => {
    console.log(app.address().port)
}

Powinno wyjść port twojego app. Ponadto pierwszy parametr 0 może być całkowicie ignorowane, ale jest nie zaleca się

 1
Author: Syed Huzaifa Hassan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-07 18:05:41

Upewnij się, że uruchamiasz się z tego folderu aplikacji, w którym masz pakiet.json.

 0
Author: Shreeparna Sarkar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-10 10:20:24

Zobacz ten link.

Spróbuj zlokalizować lokalizację bin>www i spróbuj zmienić numer portu...

 0
Author: Abhishek Gautam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-26 19:59:51

Używam pakietu minimist i argumentów startowych węzła do sterowania portem.

node server.js --port 4000

Lub

node server.js -p 4000

Wewnątrz serwera.js, port może być określony przez

var argv = parseArgs(process.argv.slice(2))

const port = argv.port || argv.p || 3000;
console.log(`Listening on port ${port}...`)

//....listen(port);

I domyślnie jest to 3000, jeśli żaden port nie jest przekazywany jako argument.

Możesz następnie użyć funkcji listen na zmiennej port.

 0
Author: williamli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 13:01:22

W aplikacji.js, po prostu dodaj...

process.env.PORT=2999;

Spowoduje wyizolowanie zmiennej PORT do aplikacji express.

 0
Author: Mark Longmire,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-09 02:21:12