узел js слушает ошибку EADDRINUSE для простого httpserver - PullRequest
10 голосов
/ 09 февраля 2012

У меня есть простой узел js http server.

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)

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

Ответы [ 7 ]

25 голосов
/ 09 февраля 2012

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

- Обновление -

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

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

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

6 голосов
/ 26 октября 2016

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

 killall node
3 голосов
/ 12 декабря 2018

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

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

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

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

2 голосов
/ 05 ноября 2012

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

0 голосов
/ 03 июля 2019

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

Stop-Process -Name "ProcessName" -Force

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

Подробнее здесь: Как убить процесс в windows

0 голосов
/ 15 октября 2018

На моем Linux Mint убить только на PID работа у меня:

netstat -nltp | grep 8080 - показывает PID использования 8080 порта, мой вывод:

tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 27599/node - PID сервера узлов узла - 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 не помогло.

0 голосов
/ 09 марта 2018

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

...