Если я запускаю сервер с портом 80 и пытаюсь использовать xmlHTTPrequest, я получаю эту ошибку:Error: listen EADDRINUSE
Почему это проблема для nodejs, если я хочу сделать запрос, когда я запускаю сервер на порту 80? Для веб-браузеров это не проблема: я могу путешествовать по Интернету, пока сервер работает.
Сервер является:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
И просьба:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
sys.puts("State: " + this.readyState);
if (this.readyState == 4) {
sys.puts("Complete.\nBody length: " + this.responseText.length);
sys.puts("Body:\n" + this.responseText);
}
};
xhr.open("GET", "http://mywebsite.com");
xhr.send();
javascript
node.js
Дэнни Фокс
источник
источник
Ответы:
EADDRINUSE
означает, что номер порта, которыйlisten()
пытается привязать сервер, уже используется.Таким образом, в вашем случае, должен быть запущен сервер уже на 80-м порту.
Если у вас есть другой веб-сервер, работающий на этом порту, вы должны поместить node.js за этим сервером и прокси-сервер через него.
Вы должны проверить это
listening
событие, чтобы увидеть, действительно ли сервер прослушивает:источник
Что действительно помогло мне:
Но это убьет системный процесс.
С
Вы можете проверить, сработало ли это.
источник
ps aux | grep node
покажет это. Вместо того , чтобы убить приложение с CTRL + Z , выйти из приложения с CTRL + C . Это корректно завершает работу приложения, и привязка порта удаляется.Вышеупомянутое
killall -9 node
, предложенное Патриком, работает должным образом и решает проблему, но вы можете прочитать часть этого ответа, посвященную редактированию, о том, почему этоkill -9
может быть не лучшим способом сделать это.Кроме того, вы можете захотеть нацелиться на один процесс, а не на слепое уничтожение всех активных процессов.
В этом случае сначала получите идентификатор процесса (PID) процесса, запущенного на этом порту (скажем, 8888):
lsof -i tcp:8888
Это вернет что-то вроде:
Тогда просто сделайте (ps - на самом деле нет . Пожалуйста, продолжайте читать ниже):
kill -9 57385
Вы можете прочитать немного больше об этом здесь .
РЕДАКТИРОВАТЬ: я читал на довольно смежную тему сегодня и наткнулся на эту интересную ветку о том, почему я не должен
kill -9
процесс .Итак, как уже говорилось, вам лучше убить описанный выше процесс с помощью:
kill -15 57385
РЕДАКТИРОВАТЬ 2 : Как отмечалось в комментарии здесь много раз, эта ошибка является следствием не изящного выхода из процесса. Это означает, что много людей выйти из команды узла (или любой другой) , используя сочетание клавиш CTRL + Z . Правильный способ остановить запущенный процесс - выполнить команду CTRL + C, которая выполняет чистый выход.
Правильный выход из процесса освободит этот порт при выключении. Это позволит вам перезапустить процесс, не беспокоясь о том, чтобы убить его самостоятельно, прежде чем сможете снова запустить его.
источник
pgrep node
показывает, сбежал ли какой-либо процесс узла на вас.pkill node
убьет их.Просто голова в голову, Skype иногда прослушивает порт 80 и, следовательно, вызывает эту ошибку, если вы пытаетесь прослушивать порт 80 из Node.js или любого другого приложения.
Вы можете отключить это поведение в Skype, открыв опции и щелкнув Дополнительно -> Соединение -> Использовать порт 80 (снимите этот флажок)
источник
Вы должны попытаться убить процесс, который прослушивает порт 80.
Killall убьет все работающие приложения узла. Возможно, вы не захотите этого делать. С помощью этой команды вы можете убить только одно приложение, которое прослушивает известный порт.
Если вы используете unix, попробуйте эту команду:
источник
Два возможных решения для Windows / Mac
1. Номер свободного порта
Windows
макинтош
Вы можете попробовать netstat
Для OSX El Capitan и новее (или если ваш netstat не поддерживает -p), используйте lsof
если это не решит вашу проблему,
Mac
пользователи могут обратиться к полному обсуждению этой проблемы. Найти (и убить) процесс, блокирующий порт 3000 на Mac2. Изменить номер порта?
Windows
макинтош
источник
netstat -ona | findstr ".0:PORT +0.0.0.0:0 +LISTENING" | for /f "tokens=5" %t in ('more') do taskkill /PID:%t /f
Под контроллером env вы можете использовать:
pkill node
перед запуском ваш скрипт должен сделать работу.Имейте в виду, что эта команда убьет все
node
процессы, что может быть правильным, если у вас есть, например, контейнер, выполняющий только один экземпляр, а у вас есть такой env, где вы можете это гарантировать.В любом другом случае я рекомендую использовать команду для уничтожения определенного идентификатора процесса или имени, которое вы нашли, ища его программно. как если бы ваш процесс вызывался, узел-сервер-1 вы могли бы сделать
pkill node-server-1
.Этот ресурс может быть полезен для понимания: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/
источник
pgrep node
Если вы хотите быть немного осторожнее и посмотреть, какиеnode
процессы запущеныВаше приложение уже работает на этом порту 8080. Используйте этот код, чтобы убить порт и снова запустить ваш код
источник
kill -9
почти наверняка является излишним, и, на мой взгляд, ужасным советом, который нужно давать без конкретных предупреждений о Это. Простоkill
, вероятно , сделать трюк, и действительно, основная проблема в этом вопросе, я думаю, что они пытаются повторно запустить на сервер снова и снова, так что это только хак, а не исправить. Они должны лучше понимать, что происходит, что этот ответ на самом деле не дает.Еще одна вещь, которая может выдать эту ошибку, это два HTTP-сервера в одном коде узла. Я обновлял код Express 2 до Express 3, и у меня было это ...
И это вызвало эту ошибку.
источник
Это работает для меня (я использую Mac). Запустите эту команду
lsof -PiTCP -sTCP:LISTEN
Это покажет список портов, которые использует ваша система. Найдите,
PID
что ваш узел работаети беги
kill -9 [YOUR_PID]
источник
EADDRINUSE
означает, что порт (который мы пытаемся прослушать в приложении узла) уже используется. Чтобы преодолеть это, нам нужно определить, какой процесс выполняется с этим портом.Например, если мы пытаемся прослушать приложение нашего узла в порту 3000. Нам нужно проверить, используется ли этот порт каким-либо другим процессом.
шаг 1:
Что приведенная выше команда дает ниже результат.
шаг 2:
Теперь у вас есть идентификатор процесса (25315), убить этот процесс.
шаг 3:
Примечание: это решение для пользователей Linux.
источник
источник
для насильственного убийства
используйте выше cmd, чтобы убить определенный порт и затем запустить свой сервер
источник
Попробуйте обе команды, и это остановит весь процесс узла.
источник
Эта ошибка возникает, когда у вас запущен какой-либо процесс на порту, на котором вы хотите запустить свое приложение.
как узнать, какой процесс выполняется на этом порту => команда: sudo netstat -ap | grep: 3000
вывод: вы получите информацию о процессе, который использует этот порт
tcp 0 0 IP-адрес: 3000 : СЛУШАТЬ 26869 / узел
Теперь вы можете убить этот процесс sudo kill -9 26869
источник
В приведенной ниже команде замените ваш номер порта
источник
EADDRINUSE означает, что порт вашего приложения nodejs уже используется.
источник
Есть способ завершить процесс с помощью диспетчера задач:
Зайдите в диспетчер задач (или воспользуйтесь сочетанием клавиш Ctrl+ Shift+ Esc)
В «Фоновых процессах» найдите процессы «Node.js» и завершите их (щелкните их правой кнопкой мыши и выберите «Завершить задачу»).
источник
Я видел эту ошибку раньше (в узле) с http.client, и, насколько я помню, проблема была связана с не инициализацией httpClient или установкой неверных опций при создании httpClient и / или в запросе url.
источник
У меня тоже такая же проблема, и я просто закрываю терминал, открываю новый терминал и запускаю
снова. это работает для меня, некоторое время просто нужно подождать несколько секунд, пока он снова не заработает.
Но это работает только на компьютере разработчика, а не на серверной консоли.
источник
Ошибка: прослушивание EADDRINUSE означает, что порт, который вы хотите назначить / привязать к вашему серверу приложений, уже используется. Вы можете назначить другой порт вашему приложению.
Или, если вы хотите назначить тот же порт для приложения. Затем убейте приложение, запущенное на желаемом порту.
Для приложения узла, вы можете попробовать найти идентификатор процесса для приложения узла:
После получения идентификатора процесса выполните
источник
В Debian я обнаружил, что для запуска на 80-м порту необходимо выполнить команду от имени root, т.е.
Я надеюсь, что это помогает
источник
В моем случае Apache HTTP Server был запущен на порту 80, я решил это с помощью команды root
sudo killall httpd
Обновить
Если Jenkin установлен и работает на вашем Mac;
sudo lsof -i tcp:8080
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
источник
Кажется, что запущен еще один Node ng обслуживающий процесс. Проверьте это, набрав это в своей консоли (Linux / Mac):
и выйдите из него:
ИЛИ альтернативного использования
обслуживать ваш проект на свободном порту по вашему выбору.
источник
Убивая NODE_PORT, он может убить ваш процесс chrome или все, что слушает тот же порт, и это раздражает.
Этот сценарий оболочки может быть полезен - в моем случае порт 1337, но вы можете изменить его в любое время
источник
В моем случае я использую веб-хостинг, но на локальном хосте то же самое, я использовал:
тогда для наблюдения за процессом узла консоль показывает процесс с PID. Для уничтожения процесса вы должны использовать эту команду:
где PID - это идентификатор процесса из приведенной выше команды.
источник
Два сервера не могут прослушивать один и тот же порт, поэтому проверьте, прослушивает ли другой сервер этот же порт, а также проверьте синхронизацию браузера, если он работает на том же порту.
источник
Для других людей на Windows 10 с узлом, как
localhost
и работает на порт, как 3500, а не 80 ...Что не работает:
Что показывает информацию, но все еще не работает:
Что работает:
Git Bash или Powershell для Windows
Обратите внимание на PID (далеко справа),
я не мог добраться
killall
до работы ... такТеперь, после этого не очень веселого упражнения для Windows, я понял, что могу использовать диспетчер задач, найти движок Node и просто завершить его.
К вашему сведению, я использовал код Visual Studio для запуска Node через порт 3500, и я использую оболочку Git Bash внутри кода VS. Я грациозно завершил работу с помощью Ctrl + C, но иногда это не убивает его. Я не хочу менять свой порт или перезагружаться, чтобы это работало. Надеюсь, это поможет другим. В противном случае это документация для меня.
источник
Для пользователей Windows выполните следующую команду в окне PowerShell, чтобы завершить все процессы узла.
источник
Вариант, который работает для меня:
Запустить:
Вы получите что-то вроде:
источник