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

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

Сервер запущен на порту 3000
Порт 3000 уже используется

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

In my app.js I have the following code to set the port...is this incorrect? It worked fine before so I'm not sure what I am doing wrong.

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

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


РЕДАКТИРОВАТЬ:

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

user2573690

Ответов: 40

Ответы (40)

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

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

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

Я решил эту проблему, потому что MongoDB или есть другое приложение, которое вы запускали раньше на этом порту, чтобы решить эту проблему, убейте процесс из диспетчера задач, или просто измените номер порта с 3000 на любой другой.

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

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

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

Вы можете использовать kill-port. Во-первых, уничтожьте существующий порт, а во-вторых, создайте сервер и слушайте.

const kill = require('kill-port')

kill(port, 'tcp')
    .then((d) => {
        /**
     * Create HTTP server.
     */
        server = http.createServer(app);

        server.listen(port, () => {
            console.log(`api running on port:${port}`);
        });
    })
    .catch((e) => {
        console.error(e);
    }) 

Убедитесь, что в вашем файле hosts настроен localhost

127.0.0.1       localhost

https://github.com/facebook/create-react-app/issues/2843

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

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

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

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

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

Это старый вопрос, но, похоже, никто из респондентов не читал его. У меня была такая же проблема, и проблема заключалась в том, что Windows иногда резервирует блоки портов и не позволяет вам их использовать. Порт не отображается через netstat или какой-либо другой инструмент.Прочитать об этом можно здесь:

По сути, вы можете указать Windows оставить ваш порт в покое с помощью этого:

netsh int ipv4 add excludedportrange tcp startport=3000 numberofports=1 store=persistent

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

Порт встроенного сервера

и установите его на «63342» или посмотрите этот ответ Изменить порт WebStorm LiveEdit (63342)

В ubuntu сначала захватите процесс, используя номер порта: sudo lsof -i: 3000 затем используйте команду kill, чтобы убить процесс, например, если PID процесса равен 4493, используйте команду: kill 4493, для Mac или Windows найдите соответствующую команду

enter image description here

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

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

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

sudo ps -ef

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

kill -9 

Если проблема не исчезла, просто убейте весь узел

killall node
 killall -9 node

указанная выше команда может выйти из ssh-соединения с кодом при удаленной разработке и убить все процессы узла, которые могут привести к проблемам, особенно если у вас есть приложения на производстве, использующие узел, есть лучший способ сделать это, используя netstat для получить все процессы узла с портом, который они используют, а затем убить единственный, который вам нужен, с помощью PID

 netstat -lntp | grep node

вы получите все процессы узла

 tcp6  0      0 :::5744    :::*    LISTEN     3864/node

, а затем, когда вы получите PID (3864), просто убейте процессы по PID

   kill -9 PID

или

   kill -HUP PID 

Может быть, вы воспользуетесь этим как ссылкой. Эта единственная командная строка может убить процесс, запущенный на данном порту.

npx kill-port 3000

enter image description here


Чтобы убить несколько портов.

npx kill-port 3000 8080 4200

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

Однако, когда я делаю это с помощью обычной командной строки Windows, все работает нормально.

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

Спасибо.

Сегодня я столкнулся с той же проблемой, так как нашел решение.

Проблема заключается в том, что в фоновом режиме работают службы узлов, даже если nodemon перезапускается.

Я получил много ответов, но все они содержат несколько команд. Вот простая команда, которую я нашел для своего случая

sudo pkill node

Это остановит все запущенные процессы с узла, и ваш nodemon начнет работать должным образом.

Пришел сюда от 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

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

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

Также

sudo lsof -i:

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

sudo kill 

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

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

  killall -9 node

Убивает процесс, которому принадлежит порт 3000

Во-первых, давайте посмотрим, как мы можем убить процесс, у которого открыт порт.

Используя команду lsof, мы можем получить PID, имеющий данный порт:

$ lsof -i :3000 -t
12345

Тогда мы можем убить этот процесс, просто выполнив:

$ kill 12345

Давайте превратим это в однострочник:

lsof -i 3000 -t | xargs kill

Если вы используете переменную среды для установки порта сервера, мы можем указать это вместо жесткого кодирования наших значений:

lsof -i ${PORT} -t | xargs kill

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

lsof -i ${PORT:-3000} -t | xargs kill

Получение nodemon для выполнения хуков

Nodemon позволяет настраивать перехватчики событий через файл конфигурации nodemon.json:

{
  "events": {
    "crash": "sh -c 'lsof -i :${PORT:-3000} -t | xargs kill'"
  }
}

Это заставит nodemon выполнить sh -c 'lsof -i:$ {PORT: -3000} -t | xargs kill всякий раз, когда ваше приложение дает сбой, тем самым убивая порожденный им дочерний процесс, который держит порт открытым.

или вы можете попробовать этот

fuser -k PORT-NO/tcp

Например:

fuser -k 3000/tcp

Вы тоже можете попробовать

fuser -n tcp -k PORT-NO

Например:

fuser -n tcp -k 3000

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

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

Для Linux / Mac Поиск ОС (sudo) запустите это в терминале:

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

В Windows:

netstat -ano | findstr :3000
tskill typeyourPIDhere 

изменить tskill на taskkill в git bash

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

enter image description here

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

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

или

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



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

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

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

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

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

Убивает все запущенные порты (mac):

killall node

Для пользователя Windows: просто остановите все процессы Node.js в Задаче Менеджер

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

Простой в Linux

  • Откройте свой терминал
  • Свободный порт от процессов -> убить $ (lsof -t -i: $ порт)

Все очень просто. Вы можете исправить это за 2 простых шага.

  1. Проверьте переменные среды, если есть ключ / запись с именем «ПОРТ».
  2. Если обнаружено, удалите эту запись или переименуйте ее во что-нибудь другое.

Оказывается, эту переменную использует какая-то другая программа. Обычно, когда вы запускаете сценарий реакции, он будет искать переменную окружения с таким названием PORT.

Если вы хотите закрыть только один порт, просто запустите эту команду. kill -9 $ (lsof -t -i: 3000)

Разница между pkill и kill в том, что кто-то обрабатывает глину. В kill вы применяете фильтр. просто остановите нужный порт.

Команда pkill закрывает все процессы узла. узел pkill -9

Используйте pkill, чтобы избежать утечек памяти, которые время от времени возникают во время разработки. если имеется более одного узла, он убивает их все.

Также проиллюстрировано использование скриптов в package.json.

"scripts": {
    "server:start": "cd server && yarn start",
    "server:restart": "cd server && yarn restart",
    "frontend:start": "cd frontend && yarn start",
    "frontend:restart": "kill -9 $(lsof -t -i:4200) && yarn start:frontend"
},
"scripts": {
    "start": "nodemon --watch 'src/**/*.ts' --ignore 'src/**/*.spec.ts' --exec 'ts-node' src/index.ts",
    "restart": "pkill -9 node && start",
    "kill": "pkill -9 node"
},

Перед запуском nodemon, сначала запустите mongod. Вы никогда не получите эту ошибку.

Я тоже столкнулся с той же проблемой. Лучший способ решения - (для Windows):

  1. Заходим в Диспетчер задач.

  2. Прокрутите и найдите процесс задачи с именем. Node.js: серверный JavaScript Image added for reference

  3. Завершить эту конкретную задачу.

Вот так! Теперь выполните npm start и все будет работать как раньше!

В моих обстоятельствах я только начал использовать VS Code и следовал руководству по использованию Sequelize. В итоге у меня был bin /www file, в котором был listen (). Я не знал об этом, и я запускал свое приложение, запустив node app.js, когда он не работал, я добавил в экспресс-сервер материал с помощью .listen () (который работал нормально).

Но когда начинал использовать nodemon и VSCode, он указывал на bin /www and, который требовал моего app.js.

Короче говоря, я добавил .listen () в свой app.js и запускал app.js напрямую, хотя мне не следовало его добавлять и запускать bin / www.

Я использовал экспресс-сервер с nodemon на NodeJS. Я получил следующее сообщение и похоже на ошибку:

$ node ./bin/www
Port 3000 is already in use

Существует общее решение: если вы завершите все подключения к серверу узлов, вы можете добавить этот код в свой файл package.json:

"scripts": {
    "start": "node ./bin/www",
    "stop": "taskkill -f -im node.exe"
},

Вдобавок я нашел несколько решений для Windows command и bash на Win 10 x64.

Все мои заметки здесь:


# Завершить все подключения к серверу NodeJS

$ taskkill -f -im node.exe
SUCCESS: The process "node.exe" with PID 14380 has been terminated.
SUCCESS: The process "node.exe" with PID 18364 has been terminated.
SUCCESS: The process "node.exe" with PID 18656 has been terminated.

# Пример: откройте диспетчер задач Windows и посмотрите номер PID «node.exe» в Windows

>> Command Line
$ netstat /?
$ netstat -a -n -o
$ netstat -ano

# Убить процесс в Windows по номеру порта (пример)

Для справки:

$ taskkill /?
$ tskill /?

Код 1:

$ taskkill -pid 14228
ERROR: The process with PID 14228 could not be terminated.
Reason: This process can only be terminated forcefully (with /F option).

Код 2:

$ taskkill -f -pid 14228
SUCCESS: The process with PID 14228 has been terminated.

Код 3:

$ tskill 14228

# Командная строка для просмотра конкретного порта

в cmd:

$ netstat -ano | find "14228"

в bash:

$ netstat -ano | grep "14228" or $ netstat -ano | grep 14228

# Найти node.exe с помощью команды "tasklist"

в cmd:

$ tasklist | find "node"

в bash:

$ tasklist | grep node
$ tasklist | grep node.exe
node.exe                     14228 Console                    2     48,156 K
node.exe                     15236 Console                    2     24,776 K
node.exe                     19364 Console                    2     24,428 K

Поздний ответ, но может кому-то помочь:

В моем случае ничто не использовало порт 3000 (так же, как OP, но все ответы касаются уничтожения процесса, использующего этот порт, что не помогает).

Однако в диспетчере задач мы запустили две копии node.exe и перезапустились бы, даже если бы я их убил.Если вы щелкните правой кнопкой мыши node.exe в диспетчере задач, вы увидите, где этот процесс запущен. Для меня оказалось, что Adobe Creative Cloud упаковала собственный node.exe, и это вызывало у меня проблемы. Переименование файлов (поскольку я не использовал облачный сервис) у меня сработало.

Недавно я столкнулся со странной проблемой порта на win10, не могу начать прослушивание серверного процесса на порту 8080, и я изменил его на 18080, тогда он работает, но после в то время как та же проблема появляется снова. Но я не могу найти какой-либо процесс, использующий порт, я пробовал currpots и netstat, ни один из них не работает, и я пытаюсь открыть порт с помощью

python -m http.server 18080
python -m http.server 18081
python -m http.server 18082
python -m http.server 18083
python -m http.server 18084
...

, большинство говорит подобное сообщение "порт уже используется" К счастью, я поискал и понял причину. По

netsh interface ipv4 show excludedportrange protocol=tcp

Видно, что некоторые порты исключены для использования, через эти порты не открываются и не прослушиваются. И по

net stop winnat

Освобождаются самые исключенные порты, затем эти порты можно использовать.

Это начало происходить со мной сегодня в Windows. Я перезапустил свой компьютер и убедился, что на порту 3000 ничего нет.

Я пробовал использовать 3001, 3005 с тем же результатом.

В итоге я перешел на 8881, и теперь он работает.

Единственное, что изменилось для меня, это установка обновлений Windows и обновление source-map-explorer. Поскольку это также происходит в других приложениях, это либо что-то с Web Storm, либо с окнами. Я предполагаю, что порты могут быть заблокированы, а порты в диапазоне 88XX - нет.

Это случается, когда с командой

не указано ни одной задачи
lsof -i:3000

И все равно выдает ошибку

Error: listen EADDRINUSE: address already in use 0.0.0.0:3000

Одна из причин заключается в том, что в Nginx conf.d check ни одна конфигурация не прослушивает порт 3000

2022 WebDevInsider