Решение ошибки "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)
Изменение порта в приложении:
// Теперь мы используем порт 3001! const port = 3001; app.listen(port); // Слушаем порт 3001
Подробное решение проблемы
- Проверка настроек: Проверьте, что правильный порт установлен в файле
app.js
. Фоновые сервисы типа Nodemon могут незаметно занять его. - Перезагрузка не всегда помогает: Иногда перезагрузка не способна освободить порт, особенно в Windows.
- Инструменты разработчика: На Linux и Mac
kill -9
— это наиболее эффективный способ. Для Windows соответствующей командой будетtaskkill /F /PID PID
. - Упрощение с помощью npx kill-port: Воспользуйтесь командо
npx kill-port <port>
, чтобы легко освободить любой порт. - Профилактика проблем: Добавьте в скрипт запуска приложения проверку порта, чтобы предотвратить конфликты с EADDRINUSE.
Визуализация
Представьте порты компьютера как входные двери дома 🏢:
| Порт | Состояние |
| ----------- | ------------------ |
| Порт 2999 | Открыт 🚪 |
| Порт 3000 | Закрыт 🚷⛔️ |
| Порт 3001 | Открыт 🚪 |
Node.js утверждает, что вход в Порт 3000 закрыт. Но это не так.
// Пытаемся войти на Порт 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, будьте бдительны.
Полезные материалы
- Errors | Node.js v21.6.1 Документация – поищите решения для ошибки EADDRINUSE и других системных ошибок на официальном сайте Node.js.
- node.js – Node / Express: EADDRINUSE, Адрес уже используется – Остановить сервер – Stack Overflow – здесь собраны многообразные способы решения проблемы конфликта портов в Node.js.
- Net | Node.js v21.6.1 Документация – в этой документации net-модуля Node.js вы найдёте все необходимые данные для глубокого понимания задач сетевого программирования и построения серверов.
- PM2 – Быстрый старт – из этого руководства узнайте, как управлять процессами PM2, чтобы избежать проблем с портами в Node.js.
- server – Как заставить приложение node.js работать постоянно? – Stack Overflow – здесь вы найдете информацию о том, как обеспечить непрерывную работу приложений на Node.js и советы по освобождению портов.