Pracuję nad projektem node.js od kilku tygodni i działa świetnie. Zwykle używam npm start
do uruchamiania aplikacji i przeglądania jej w przeglądarce na serwerze lokalnym, port 3000.
Dzisiaj zacząłem otrzymywać następujący błąd podczas korzystania z npm start:
Server started on port 3000
Port 3000 is already in use
Sprawdziłem monitor zasobów i nie mam innego procesu uruchomionego na porcie 3000. Dlaczego otrzymuję ten komunikat o błędzie?
W moim app.js mam następujący kod do ustawienia portu ... czy to jest nieprawidłowe? Wcześniej działało dobrze, więc nie jestem pewien, co robię źle.
// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
console.log('Server started on port '+app.get('port'));
});
Dzięki za pomoc!
EDYTOWAĆ:
Próbowałem uruchomić netstat i TCPView, aby sprawdzić, który proces używa portu, ale nic nie używa tego portu. Próbowałem też zrestartować laptopa, ale nadal pojawia się ten sam błąd.
javascript
node.js
npm
port
user2573690
źródło
źródło
netstat
w wierszu poleceń lub połączyć się z localhost: 3000 za pomocą odpowiednika telnetu - na przykład PuTTY.app.listen()
instrukcje w swojej aplikacji na innej,.listen()
która również próbuje uruchomić serwer na tym porcie. Pierwsza działa, druga zgłasza błąd. Wyszukaj w swoim kodzie.listen
.Odpowiedzi:
Możesz szukać, jak zabić ten proces.
W przypadku systemu Linux / Mac OS wyszukaj
(sudo) run
to w terminalu:W systemie Windows:
zmiana
tskill
nataskkill
w git bashźródło
lsof
zsudo lsof
czymś, ale coś dostaję, a zabicie tego procesu rozwiązało problem.Czasami tak się dzieje, jak zaproponowała @sova. Czasami mi się to zdarza, gdy używany jest EADDR . Zazwyczaj w tle ukrywa się okno terminala, na którym nadal działa aplikacja. I to też jest w porządku ze mną.
Zdarza się, że kiedy otwierasz terminal przez długi czas, tak, masz rację, zatrzymałeś proces. Ale czasami nie zatrzymywał się w tle. Najlepszym rozwiązaniem jest więc zamknięcie terminala i ponowne uruchomienie. To rozwiąże Twój problem. bo w moim przypadku to działa.
Również,
zamknij instancję na chwilę obecną, ale nie możesz zatrzymać procesu w tle. Więc raz,
działa, ale ponownie, gdy zaktualizujemy nasz kod i zapiszemy, ten problem pojawia się ponownie, tak jak w przypadku Nodemon .
Wyjście z terminala rozwiąże problem. LUB
źródło
killall -9 node
jak mogłem uruchomić serwer lokalnie.Może możesz wziąć to jako odniesienie. Ta pojedyncza linia poleceń może zabić proces działający na danym porcie.
Zabić wiele portów.
źródło
W przypadku systemu Windows Menedżer zadań z pewnością pokaże uruchomiony proces węzła. Spróbuj zabić proces, to rozwiąże problem.
źródło
Miałem ten sam problem. (Poniższe kroki działają dobrze w systemie Windows 10):
Teraz możesz biec
npm start
.Mam nadzieję, że ci to pomoże.
źródło
Widziałem to samo i wypróbowałem wszystkie powyższe sugestie bez powodzenia. Oto kroki, które rozwiązują to dla mnie: - wyłącz wifi - start npm (to powinno działać) - włącz wifi
Nie jestem do końca pewien, na czym polega problem główny, ale to rozwiązało go dla mnie.
źródło
netstat -ano
nie wymieniał niczego przy użyciu portu 3000.Używałem serwera ekspresowego z nodemonem na NodeJS. Otrzymałem następujący komunikat i wygląda na to, że jest to błąd:
Istnieje ogólne rozwiązanie, które polega na zakończeniu wszystkich połączeń z serwerem węzłów, można dodać ten kod do pliku package.json:
Ponadto znalazłem kilka rozwiązań poleceń Windows i bash na Win 10 x64.
Wszystkie moje notatki są tutaj:
# Zakończ wszystkie połączenia z serwerem NodeJS
# Przykład: Otwórz Menedżera zadań Windows i zobacz numer PID „node.exe” w systemie Windows
# Zabij proces w systemie Windows według numeru portu (przykład)
O pomoc:
Kod 1:
Kod 2:
Kod 3:
# Linia poleceń do patrzenia na określony port
w cmd:
w bash:
# Znajdź node.exe za pomocą polecenia „tasklist”
w cmd:
w bash:
źródło
Zabicie procesu, który jest właścicielem portu 3000
Najpierw przyjrzyjmy się, jak możemy zabić proces, który ma otwarty port.
Za pomocą polecenia lsof możemy pobrać PID, który ma dany port:
Następnie możemy zabić ten proces, wykonując:
Zmieńmy to w jedną linijkę:
Jeśli używasz zmiennej środowiskowej do ustawiania portu serwera, możemy to określić zamiast zakodować na stałe nasze wartości:
Na koniec możemy domyślnie ustawić port 3000, jeśli zmienna środowiskowa nie jest ustawiona:
Pobranie nodemona do wykonania przechwyceń
Nodemon umożliwia konfigurowanie podpięć zdarzeń za pośrednictwem pliku konfiguracyjnego nodemon.json:
To spowoduje, że nodemon wykona sh -c 'lsof -i:
${PORT:-3000} -t | xargs
kill za każdym razem, gdy aplikacja ulegnie awarii, zabijając w ten sposób proces potomny, który utworzył, który utrzymuje otwarty port.lub możesz spróbować tego
na przykład:
źródło
lsof -i :3000 -t
fuser -k port-number/tcp
Czasami mi się to zdarza, gdy używany jest EADDR. Zazwyczaj w tle ukrywa się okno terminala, na którym nadal działa aplikacja. Możesz zatrzymać proces za pomocą ctrl + C w oknie terminala.
A może wielokrotnie słuchasz portu z powodu copy / pasta =)
źródło
.listen()
wiele razy?Otwórz Menedżera zadań (naciśnij Ctrl + Alt + Del Wybierz zakładkę „Procesy” Wyszukaj „Node.js: JavaScript po stronie serwera” Wybierz go i kliknij przycisk „Zakończ zadanie”
źródło
Pochodzi z Google tutaj z rozwiązaniem dla High Sierra.
Coś się zmieniło w konfiguracji sieci w macOS i niektórych aplikacjach (w tym ping) nie może rozwiązać localhost.
Edycja / etc / hosts wydaje się być poprawką:
cmd:
sudo nano /etc/hosts/
zawartość127.0.0.1 localhost
Lub po prostu (jeśli jesteś pewien, że twój / etc / hosts jest pusty)
sudo echo '127.0.0.1 localhost' > /etc/hosts
źródło
Spędziłem 2
EADDRINUSE
godziny na ustaleniu, dlaczego nie pozwoliłem mi sartować aplikacji (inne serwery node-express były w porządku) ... zaczęło działać po dodaniulazyConnect: true,
do konfiguracji źródła danych.Nie pytaj mnie, dlaczego to pomogło. Nie wiem. Umieszczam tutaj te informacje tylko dla osób, które mają ten sam problem.
źródło
Mam ten problem, używając Git Bash w systemie Windows. Biegam
npm start
lubnode app.js
. Po zamknięciu go krótko Ctrl + C i ponownej próbie uruchomienia serwera za pomocąnpm start
lubnode app.js
pojawia się ten komunikat o błędzie.Jednak gdy robię to za pomocą zwykłego wiersza polecenia systemu Windows , działa dobrze.
Lub możesz to zrobić w inny sposób. Otwórz Menedżera zadań i znajdź wiersz „ Node.js: JavaScript po stronie serwera ”. Wybierz to i zakończ zadanie . Teraz powinno działać.
Dzięki.
źródło
Jeśli chcesz zamknąć tylko jeden port, po prostu uruchom to polecenie.
kill -9 $(lsof -t -i:3000)
Różnica między
pkill
ikill
czy ktoś przetwarza glinę. Zabijając stosujesz filtr. po prostu zatrzymaj żądany port.pkill
Rozkaz zamknięcie wszystkich procesów węzłów.pkill -9 node
Użyj pkill, aby uniknąć wycieków pamięci, które występują sporadycznie podczas programowania. jeśli jest więcej niż jeden węzeł, zabija je wszystkie.
Zilustrowano również użycie skryptów w package.json .
źródło
Spróbuj otworzyć localhost w przeglądarce. Wystarczy wpisać:
localhost:3000
w pasku adresu.Jeśli aplikacja się otwiera, oznacza to, że poprzednia
npm run
jest nadal aktywna. Teraz możesz po prostu wprowadzić zmiany w kodzie i zobaczyć efekty, jeśli projektujesz tę samą aplikację, lub jeśli chcesz uruchomić inną aplikację, po prostu popraw kod (w index.js poprzednio uruchomionej aplikacji) i ( prawdopodobnie odśwież kartę przeglądarki), aby się zawiesić;) ..... Teraz uruchomnpm run start
ponownie z nowego katalogu aplikacji. Mam nadzieję że to pomoże! :)lub
Możesz otworzyć Menedżera zadań (WINDOWS_KEY + X> Menedżer zadań), a zobaczysz wiersz „Node.js: JavaScript po stronie serwera”. Wybierz to i zakończ zadanie .... Powinno działać teraz !!
Jeśli nie, zmień
.env
plik aplikacji, aby uwzględnićport:3002
i uruchomić nową aplikację. Umożliwi to uruchomienie dwóch oddzielnych aplikacji na różnych portach. Twoje zdrowie!!źródło
Mam nadzieję, że to pomoże
źródło
Proste w Linuksie
źródło
Napotkałem też ten sam problem. Najlepszym sposobem rozwiązania tego problemu jest (dla systemu Windows) :
Przejdź do Menedżera zadań .
Przewiń i znajdź proces zadania o nazwie. Node.js: JavaScript po stronie serwera
Zakończ to konkretne zadanie.
Proszę bardzo! Teraz uruchom npm i będzie działać jak poprzednio!
źródło
Użytkownicy systemu Windows mogą użyć narzędzia CurrPorts , aby łatwo zabić używane porty
źródło
Może to być proces administratora działający w tle i
netstat
nie pokazuje tego.Użyj,
tasklist | grep node
aby znaleźć PID tego procesu administracyjnego, a następniekill PID
źródło
jeśli korzystasz z burzy internetowej, upewnij się, że domyślny port to nie 3000 z pliku -> ustawienia -> Kompilacja, wykonanie, wdrożenie -> Debugger I tam zmień
i ustaw go na „63342” lub zobacz tę odpowiedź Zmień port WebStorm LiveEdit (63342)
źródło
W skryptach package.json znajdują się:
Uważam, że problem dotyczył czasu, gdy stary port nie wyłączał się na czas przez nodemona do ponownego uruchomienia. Wystąpił problem podczas używania multera.
źródło
server lub app listen () mogą zostać dodane w 2 miejscach. Wyszukaj metody Listen () w programie dla uruchamiania aplikacji, dlatego powraca jako serwer uruchomiony na porcie XXXX, a port XXXX jest już używany.
źródło
W mojej sytuacji właśnie zacząłem używać VS Code i skorzystałem z samouczka używającego Sequelize. W końcu miałem plik bin / www, który zawierał Listen (). Nie wiedziałem o tym i uruchamiałem moją aplikację, uruchamiając node app.js, kiedy to nie działało, dodałem następnie do serwera ekspresowego z .listen () (co działało dobrze).
Ale kiedy zacząłem używać nodemona i VSCode, wskazano na bin / www, a to wymagało mojego app.js.
Krótko mówiąc, dodałem .listen () do mojego app.js i uruchamiałem app.js bezpośrednio, kiedy nie powinienem był tego dodawać i uruchamiać bin / www.
źródło
W systemie Ubuntu najpierw pobierz proces, używając numeru portu: sudo lsof -i: 3000, a następnie użyj polecenia kill, aby zabić proces, na przykład jeśli PID procesu to 4493, użyj polecenia: kill 4493 , w przypadku systemu Mac lub Windows znajdź powiązane polecenie
źródło
Rozwiązałem ten problem, ponieważ MongoDB lub jest inna aplikacja, którą wcześniej uruchomiłeś na tym porcie, więc aby rozwiązać ten problem, zabij proces z menedżera zadań lub po prostu zmień numer portu z 3000 na inny.
źródło
To jest bardzo proste. Możesz to naprawić w 2 prostych krokach.
Okazuje się, że inny program używa tej zmiennej. Zwykle po uruchomieniu skryptów reagujących będzie szukał zmiennej środowiskowej o tym tytule PORT.
źródło
Przed uruchomieniem nodemona uruchom najpierw mongod. Nigdy nie otrzymasz tego błędu. :)
źródło
sprawdź, czy na tym samym porcie działa jakikolwiek proces, wpisując polecenie:
Możesz znaleźć proces działający na odpowiednim porcie węzła, a następnie zabić węzeł przez
Jeśli problem nadal występuje, po prostu zabij wszystkie węzły
źródło
Zabija wszystkie uruchomione porty (Mac):
źródło