Я уже несколько раз все перепроверил, но не вижу где эта ошибка.
Вроде все правильно, и раньше все работало, а как начал экспериментировать с аутентификацией, она появилась и не хочет пропадать.
Как мне её исправить?
- Вопрос задан более двух лет назад
- 465 просмотров
Там же написано: EADDRINUSE. Порт уже используется, а вы снова хотите его открыть. Вначале закройте программу, которая использует этот порт, а потом запускайте ваш скрипт. Не исключено, что ваш же скрипт его и использует, просто вы пытаетесь запустить скрипт второй раз, а первый ещё не закрыли.
Ну и если читать не умеете, хотя бы гуглом научитесь пользоваться.
Содержание
- Comments
- SubZane commented Aug 13, 2017
- This comment has been minimized.
- SubZane commented Aug 17, 2017
- 30 ответов:
Comments
Copy link Quote reply
SubZane commented Aug 13, 2017
Any idea what this can be about? (I’m not 100% sure if this is related to your plugin) but I’m only using it in the config
events.js:163
throw er; // Unhandled ‘error’ event
^
Error: listen EADDRINUSE . 51826
at Object.exports._errnoException (util.js:1050:11)
at exports._exceptionWithHostPort (util.js:1073:20)
at Server.setupListenHandle [as _listen2] (net.js:1259:14)
at listenInCluster (net.js:1307:12)
at Server.listen (net.js:1406:7)
at EventedHTTPServer.listen (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/util/eventedhttp.js:60:19)
at HAPServer.listen (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/HAPServer.js:158:20)
at Bridge.Accessory.publish (/usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/Accessory.js:486:16)
at Server._publish (/usr/lib/node_modules/homebridge/lib/server.js:114:16)
at Server. (/usr/lib/node_modules/homebridge/lib/server.js:372:14)
at /usr/lib/node_modules/homebridge/node_modules/hap-nodejs/lib/util/once.js:16:19
at TelldusLive.loginAsync.then.then.accessories (/usr/lib/node_modules/homebridge-telldus/index.js:121:6)
at tryCatcher (/usr/lib/node_modules/homebridge-telldus/node_modules/bluebird/js/release/util.js:16:23)
at Promise._settlePromiseFromHandler (/usr/lib/node_modules/homebridge-telldus/node_modules/bluebird/js/release/promise.js:512:31)
at Promise._settlePromise (/usr/lib/node_modules/homebridge-telldus/node_modules/bluebird/js/release/promise.js:569:18)
at Promise._settlePromise0 (/usr/lib/node_modules/homebridge-telldus/node_modules/bluebird/js/release/promise.js:614:10)
This comment has been minimized.
Copy link Quote reply
SubZane commented Aug 17, 2017
I just learned that EADDRINUSE means that homebridge is already running on the same address.
Если я запускаю сервер с портом 80, и я пытаюсь использовать xmlHTTPrequest я получаю эту ошибку: Error: listen EADDRINUSE
почему это проблема для nodejs, если я хочу сделать запрос, в то время как я запускаю сервер на порту 80? Для webbrowsers это не проблема: я могу заниматься серфингом в интернете, пока сервер работает.
30 ответов:
EADDRINUSE означает, что номер порта, который listen() пытается привязать сервер к уже используется.
так, в вашем случае, там должен быть запущен сервер на порту 80 уже.
если у вас есть другой веб-сервер работает на этом порту вы должны поместить узел.js за этим сервером и прокси-сервер через него.
вы должны проверить для listening событие, как это, чтобы увидеть, если сервер действительно слушает:
что действительно помогло мне было:
но это убьет системный процесс.
вы можете проверить, если он работал.
вышеуказанного killall -9 node , предложенный Патриком работает как ожидалось и решает проблему, но вы можете прочитать часть редактирования этого самого ответа о том, почему kill -9 может не быть лучший способ сделать это.
кроме того, вы можете захотеть нацелиться на один процесс, а не слепо убивать все активные процессы.
в этом случае сначала получите идентификатор процесса (PID) процесса, запущенного на этом порту (скажем 8888):
это вернет что-то вроде:
тогда просто сделайте (ps-На самом деле не. Пожалуйста, продолжайте читать ниже):
вы можете прочитать немного больше об этом здесь.
EDIT: Я читал на тему сегодня и наткнулся на эту интересную ветку на почему бы и нет kill -9 процесс.
как правило, вы должны использовать убить -15 до убить -9 чтобы дать целевому процессу шанс очистить после себя. (Процессы не могут поймать или игнорировать SIGKILL, но они могут и часто ловят SIGTERM.) Если вы не дадите процессу шанс закончить то, что он делает, и очистить, он может оставить поврежденные файлы (или другое состояние) вокруг того, что он не сможет понять после перезапуска.
Итак, как указано, вы должны лучше убить выше процесс с:
EDIT 2: как отмечено в комментарии здесь много раз эта ошибка является следствием не выход из процесса изящно. Это означает, что многие люди выходят из команды узла (или любой другой) с помощью CTRL+Z. Правильным способом остановки запущенного процесса является выдача CTRL+C команда, которая выполняет чистый выход.
выход из процесса право путь освободит этот порт при выключении. Это позволит вам перезапустить процесс, не проходя через проблемы убить его самостоятельно, прежде чем иметь возможность повторно запустить его снова.
* * перед понижением-пожалуйста, прочитайте ответ. ЭТО АКТУАЛЬНО! Если вы собираетесь понизить это, оставьте комментарий, почему вы думаете, что это не актуально.
просто голова вверх, Skype иногда прослушивает порт 80 и поэтому вызывает эту ошибку, если вы пытаетесь прослушать порт 80 С узла.JS или любое другое приложение.
вы можете отключить это поведение в Skype, перейдя к параметрам и нажав кнопку Дополнительно — > подключение -> использовать порт 80 (снимите флажок это)
вы должны попробовать убить процесс, который прослушивает порт 80.
Killall убьет все запущенные приложения узла. Возможно, ты не захочешь этого делать. С помощью этой команды вы можете убить только одно приложение, которое слушает на известном порту.
при использовании unix попробуйте эту команду:
pkill node перед запуском скрипта следует выполнить задание.
еще одна вещь, которая может дать эту ошибку, — это два HTTP-сервера в одном коде узла. Я обновлял некоторые Экспресс 2, чтобы выразить 3 код, и было это.
и, это вызвало эту ошибку.
ваше приложение уже работает на этом порту 8080 . Используйте этот код, чтобы убить порт и запустить свой код снова
это работает для меня (я использую mac). Выполните эту команду
lsof -PiTCP -sTCP:LISTEN
это будет отображать список портов, которые использует ваш syetem. Найди PID что ваш узел работает
и работать kill -9 [YOUR_PID]
EADDRINUSE означает, что порт(который мы пытаемся слушать в узел) уже используется. Для того, чтобы преодолеть, мы должны определить, какой процесс работает с этим портом.
например, если мы пытаемся слушать наше приложение узла в порту 3000. Нам нужно проверить, используется ли этот порт уже каким-либо другим процессом.
что приведенная выше команда дает ниже результат.
теперь у вас есть идентификатор процесса(25315), убейте этот процесс.
Примечание: это решение для пользователей Linux.
причина ошибки: вы пытаетесь использовать занят port number
существуют два шага, чтобы решить эту проблему
- Свободный в настоящее время используемый номер порта
- выбрать другой номер порта для текущей программы
Windows
Mac
вы можете попробовать netstat
для OSX El Capitan и новее (или если ваш netstat не поддерживает -p), используйте lsof
если это не решит вашу проблему, Mac пользователи могут обратиться к полному обсуждению этой проблемы найти (и убить) процесс блокировки порта 3000 ВКЛ Мак
Источник: