Node.js Port 3000 уже используется, но на самом деле это не так?

Я работаю с проектом node.js в течение нескольких недель, и он отлично работает. Обычно я использую "npm start" для запуска своего приложения и просмотра его в браузере на локальном хосте, порт 3000.

Сегодня я начал получать следующую ошибку при запуске npm:

Server started on port 3000                                                                                                                                                                                         
Port 3000 is already in use 

Я проверил монитор ресурсов, и у меня нет другого процесса, запущенного на сервере 3000. Почему я должен получать это сообщение об ошибке?

В моем app.js у меня есть следующий код для установки порта... это неверно? Он работал отлично, поэтому я не уверен, что я делаю неправильно.

// Set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function() {
    console.log('Server started on port '+app.get('port'));
});

Спасибо за помощь!

EDIT: Я попытался запустить netstat и TCPView, чтобы проверить, какой процесс использует порт, но ничего не используется с этим портом. Я также попытался перезагрузить свой ноутбук, но все равно получаю ту же ошибку.

Ответ 1

Вы можете искать, как убить этот процесс.

Для поиска Linux/Mac OS (sudo) run это в терминале:

$ lsof -i tcp:3000
$ kill -9 PID

В Windows:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

изменить tskill для taskkill в мерзавца Баш

Ответ 2

Иногда это происходит, поскольку @sova предложила Это случается со мной иногда, EADDR в использовании. Как правило, в фоновом режиме скрывается окно терминала, которое все еще запускает приложение. И это также со мной.

Бывает, когда вы давно открываете терминал, да, вы правы, вы остановили процесс. Но иногда это не останавливалось на заднем плане. Лучшим решением является то, что вы закроете терминал и запустите его снова. Он решит вашу проблему. потому что в моем случае это работает.

Кроме того,

sudo lsof -i:<PORT_NO>

закрыть экземпляр для текущего времени, но не смог остановить процесс в фоновом режиме. Итак, за один раз

sudo kill <PID>

работает, но снова, когда мы обновляем наш код и сохраняем его, эта проблема возникает снова, как при использовании Nodemon.

Таким образом, выход из терминала решит проблему. ИЛИ

  killall -9 node

Ответ 3

Для окон, Диспетчер задач определенно будет показывать процесс node. Попробуйте убить процесс, он решит проблему.

Ответ 4

У меня такая же проблема. (Следующие шаги отлично работают в Windows 10):

  1. Откройте диспетчер задач (нажмите Ctrl + Alt + Delete).
  2. Выберите вкладку "Процессы"
  3. Поиск "Node.js: серверный JavaScript"
  4. Выберите его и нажмите кнопку "Завершить задачу"

Теперь вы можете запустить npm start.

Надеюсь, это поможет вам.

Ответ 5

Это случается со мной иногда, EADDR в использовании. Как правило, в фоновом режиме скрывается окно терминала, которое все еще запускает приложение. Вы можете остановить процесс с помощью ctrl + C в окне терминала.

Или, возможно, вы слушаете порт несколько раз из-за copy/pasta =)

Ответ 6

Я видел то же самое и безуспешно пробовал все предложения. Вот шаги, которые разрешают это для меня: - отключите wifi - npm start (это должно работать) - включите Wi-Fi

Я не совсем уверен, что такое корень, но это разрешило это для меня.

Ответ 7

Откройте диспетчер задач (нажмите Ctrl + Alt + Del. Выберите "Вкладка процессов". Найдите "Node.js: серверный JavaScript". Выберите его и нажмите кнопку "Завершить задачу".

Ответ 8

Пришел от Google здесь решение для High Sierra.

Что-то изменилось в сетевой настройке macos, а некоторые приложения (включая ping) не могут решить localhost.

Редактирование/etc/hosts выглядит как исправление:

cmd: sudo nano /etc/hosts/ содержание 127.0.0.1 localhost

Или просто (если вы уверены, что ваш /etc/hosts пуст) sudo echo '127.0.0.1 localhost' > /etc/hosts

Ответ 9

Я потратил 2 часа на выяснение, почему EADDRINUSE не разрешает мне отправлять приложение (другие серверы с узлом-экспрессом были в порядке)... он начал работать после добавления lazyConnect: true, в конфигурацию lazyConnect: true,.

Не спрашивайте меня, почему это помогло. Я не знаю. Я помещаю эту информацию здесь только для людей, имеющих ту же проблему.

Ответ 10

Я получил эту проблему с помощью Git Bash на Windows. Я запускаю npm start или node app.js После node app.js завершения работы с Ctrl + C и повторной попытки запустить сервер с помощью npm start или node app.js я получаю это сообщение об ошибке.

Когда я делаю это с обычной командной строкой Windows, она работает нормально.

Или Вы можете сделать это по-другому. Откройте диспетчер задач и найдите строку " Node.js: JavaScript на стороне сервера ". Выберите это и завершите задачу. Это должно работать сейчас.

Благодарю.

Ответ 11

Для пользователей Windows вы можете использовать инструмент CurrPorts, чтобы легко убивать порты

enter image description here

Ответ 12

Это может быть процесс администрирования, выполняющийся в фоновом режиме, и netstat не показывает этого.
Использовать tasklist | grep node tasklist | grep node чтобы найти PID этого процесса администрирования, а затем kill PID

Ответ 13

если вы используете webstorm, просто убедитесь, что ваш порт по умолчанию не 3000 из файла → настройки → Сборка, выполнение, развертывание → Отладчик. И там меняются

Встроенный порт сервера

и установите его в "63342" или см. этот ответ. Изменить порт WebEstorm LiveEdit (63342)

Ответ 14

Попробуйте открыть локальный хост в своем браузере. Просто введите: localhost:3000 в адресной строке.

Если приложение открывается, это означает, что ваш предыдущий npm run все еще активен. Теперь вы можете просто внести изменения в код и увидеть эффекты, если вы разрабатываете одно и то же приложение, или если вы хотите запустить другое приложение, просто подкорректируйте код (в index.js ранее запущенного приложения) немного и (и) возможно, обновите вкладку браузера), чтобы он сработал;)..... Теперь запустите npm run start снова из своего нового каталога приложений. Надеюсь это поможет! :)

или же

Вы можете открыть диспетчер задач (WINDOWS_KEY + X> Диспетчер задач), и вы увидите строку "Node.js: Server-side JavaScript". Выберите это и закончите задачу... Он должен работать сейчас!



Если нет, измените файл .env вашего приложения, чтобы включить port:3002 и запустить новое приложение. Это позволит вам запускать два отдельных приложения на разных портах. Ура !!

Ответ 15

В скриптах package.json есть:

"start": "nodemon app.js --delay 1500ms"

Я считаю, что проблема заключалась в том, что старый порт не выключался вовремя с помощью nodemon для перезапуска. Я столкнулся с проблемой, используя multer.

Ответ 16

Методы сервера или приложения listen() могут быть добавлены в 2 местах. Поиск методов listen() для запуска приложений вот почему его возвращение в качестве сервера началось с порта XXXX, а порт XXXX уже использует сообщение, приходящее рядом

Ответ 17

Работает на Mac, не пробовал на Windows: передать номер порта, который вы хотите остановить/убить, например порт 8000:

pkill -8000 node

Ответ 18

Для пользователей Windows, просто остановите все процессы Node.js в диспетчере задач

Надеюсь, это поможет

Ответ 19

проверьте наличие любого процесса, запущенного на том же порту, введя команду:

sudo ps -ef

Вы можете найти процесс, запущенный на соответствующем порту узла, а затем убить узел с помощью

kill -9 <node id>

Если проблема все еще остается, просто убейте все узлы

killall node

Ответ 20

Для пользователей Mac принудительно завершите процесс, используя приложение мониторинга активности. Выберите npm из процесса и нажмите кнопку X, чтобы выйти или принудительно выйти из процесса.

Я столкнулся с этой проблемой при обновлении и перезапуске редактора кода и исправил его с помощью монитора активности

npm в приложении мониторинга активности