Решение ошибки "Port 3000 in use" в Node.js: причины и методы

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вы столкнулись с ошибкой EADDRINUSE, которая указывает на то, что порт 3000 как будто бы занят, примените команду lsof -i :3000 для того, чтобы обнаружить скрытые процессы. Чтобы их прервать, введите в терминале kill -9 $(lsof -t -i:3000). В качестве альтернативы возможно запустить приложение на другом порте, например, на 3001, заменив соответствующую строку в коде.

Команды:

  • Поиск занятого процесса: lsof -i :3000
  • Завершение процесса: kill -9 $(lsof -t -i:3000)
  • Изменение порта в приложении:

    JS
    Скопировать код
    // Теперь мы используем порт 3001!
    const port = 3001;
    app.listen(port); // Слушаем порт 3001
Кинга Идем в IT: пошаговый план для смены профессии

Подробное решение проблемы

  • Проверка настроек: Проверьте, что правильный порт установлен в файле app.js. Фоновые сервисы типа Nodemon могут незаметно занять его.
  • Перезагрузка не всегда помогает: Иногда перезагрузка не способна освободить порт, особенно в Windows.
  • Инструменты разработчика: На Linux и Mac kill -9 — это наиболее эффективный способ. Для Windows соответствующей командой будет taskkill /F /PID PID.
  • Упрощение с помощью npx kill-port: Воспользуйтесь командо npx kill-port <port>, чтобы легко освободить любой порт.
  • Профилактика проблем: Добавьте в скрипт запуска приложения проверку порта, чтобы предотвратить конфликты с EADDRINUSE.

Визуализация

Представьте порты компьютера как входные двери дома 🏢:

Markdown
Скопировать код
| Порт        | Состояние          |
| ----------- | ------------------ |
| Порт 2999   | Открыт 🚪          |
| Порт 3000   | Закрыт 🚷⛔️       |
| Порт 3001   | Открыт 🚪          |

Node.js утверждает, что вход в Порт 3000 закрыт. Но это не так.

JS
Скопировать код
// Пытаемся войти на Порт 3000:
node server.js // Возникает ошибка: EADDRINUSE, порт 3000 уже занят

// Но, уважаемый разработчик, на самом деле...
ps aux | grep node // Ни одного процесса. Порт 3000 свободен!

Разберемся с этим замешательством и восстановим свободу порта!

Глубокий анализ освобождения порта

  • Визуальность контроля процессов с TCPView: На Windows воспользуйтесь командой netstat -ano | findstr :3000 или программой TCPView для поиска и завершения процессов по PID.
  • Полномочия суперпользователя: На Linux и Mac можно усилить команды, добавив sudo.
  • Контроль за завершением процесса: После выполнения команды kill убедитесь в отсутствии процесса, используя ps aux или Диспетчер задач Windows.
  • Особенности работы в командной строке: На Windows в Git Bash помните о различиях между tskill и taskkill.
  • Внимательность к инструментам: Инструменты подобные Nodemon могут случайно заблокировать порт 3000, будьте бдительны.

Полезные материалы

  1. Errors | Node.js v21.6.1 Документация – поищите решения для ошибки EADDRINUSE и других системных ошибок на официальном сайте Node.js.
  2. node.js – Node / Express: EADDRINUSE, Адрес уже используется – Остановить сервер – Stack Overflow – здесь собраны многообразные способы решения проблемы конфликта портов в Node.js.
  3. Net | Node.js v21.6.1 Документация – в этой документации net-модуля Node.js вы найдёте все необходимые данные для глубокого понимания задач сетевого программирования и построения серверов.
  4. PM2 – Быстрый старт – из этого руководства узнайте, как управлять процессами PM2, чтобы избежать проблем с портами в Node.js.
  5. server – Как заставить приложение node.js работать постоянно? – Stack Overflow – здесь вы найдете информацию о том, как обеспечить непрерывную работу приложений на Node.js и советы по освобождению портов.