Node js прослушивает ошибку EADDRINUSE для простого httpserver

У меня есть простой сервер node js http.

var http = require("http");

http.createServer(function(request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.write("Hello World");
  response.end();
}).listen(8888);

Если я запустил

node basicserver.js 

Я получаю

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:642:11)
    at Array.0 (net.js:743:26)
    at EventEmitter._tickCallback (node.js:192:40)

Я видел этот пост, но это сообщение, похоже, специфично для TCP-сервера, а не для http-сервера. Может ли кто-нибудь помочь.

Ответ 1

Порт, который вы слушаете, уже прослушивается другим процессом. В этом случае у меня появилось ощущение, что это ваше. Вы можете сделать ps aux | grep node, а затем с помощью kill <pid> убейте свой node процесс. Кроме того, вы также можете попробовать другой порт.

- Update -

Если вы хотите найти, какой процесс прослушивает, вы можете использовать netstat -lpn (-l - чтобы узнать порты прослушивания, -p - включить имя процесса и pid, -n - не разрешать имена хостов, иначе он будет медленным), чтобы найти процессы, которые прослушиваются на разных портах. Если их было слишком много, вы можете сделать netstat -lnp | grep :8888.

Также можно использовать fuser 8888/tcp, который покажет вам процесс pid, а также добавление -k убьет процесс, самый быстрый способ когда-либо.

Я понял, что эти две команды работают только в Linux.

Ответ 2

Чтобы убить все эксперименты на моей машине...

 killall node

Ответ 3

Порт, который вы слушаете, уже прослушивается другим процессом.

Когда я столкнулся с этой ошибкой, я убил процесс с помощью Windows PowerShell (потому что я использовал Windows)

  1. откройте Windows PowerShell
  2. напечатайте ps и тогда вы сможете получить список процессов
  3. найдите процесс с именем node и обратите внимание на Id
  4. тип Stop-process <Id>

Я думаю, что это помощь для пользователей Windows.

Ответ 4

Такая же проблема может возникнуть при попытке запустить сервер, но у вас нет привилегий root.

Ответ 5

Я также столкнулся с этой проблемой с EADDRINUSE 127.0.0.1. После проверки процессов Node я изменил IP-адрес сервера на "localhost". После этого все началось. Надеюсь, это поможет.

Ответ 6

На моем Linux Mint работают только PID kill:

netstat -nltp | grep 8080 netstat -nltp | grep 8080 - показывает PID порта 8080, мой вывод:

tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 27599/node - PID сервера dev-сервера в моем случае - 27599

а потом убей

kill -9 <PID>

kill -9 27599

Преамбула:

Не знаю, что за ошибка, но я запускаю свой сервер WebPack вроде npm run dev:

webpack-dev-server --hot --host int.loc --port 8080

И когда его прерывают - в терминале с помощью Ctrl+C и запускают его снова - он вызывает ту же ошибку Error: listen EADDRINUSE 127.0.0.1:8080, но все время, пока он не работал идеально.

killall node не помог.

Ответ 7

Для пользователей Windows: в Powershell вы можете использовать:

Stop-Process -Name "ProcessName" -Force

В этом случае "ProcessName" будет "node".

Больше информации здесь: Как убить процесс в Windows