ExpressJS - throw er Необработанное событие ошибки

Я создал приложение expressjs, используя следующие команды:

express -e folderName
npm install ejs --save
npm install

Когда я запускаю приложение с помощью: node app.js, у меня есть следующие ошибки:

events.js:72
    throw er; // Unhandled 'error' event
          ^
Error: listen EADDRINUSE
    at errnoException (net.js:884:11)
    at Server._listen2 (net.js:1022:14)
    at listen (net.js:1044:10)
    at Server.listen (net.js:1110:5)
    at Object.<anonymous> (folderName/app.js:33:24)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

Как это исправить?

Ответ 1

Вы запустили другой сервер, используя тот же порт, что и 8080.

Возможно, вы запустили node app в другой оболочке. Пожалуйста, закройте его и запустите снова.

Вы можете проверить номер порта. доступно или не используется

netstat -tulnp | grep <port no>

Ответ 2

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

  • ps aux | grep node
  • Найдите идентификатор процесса (второй слева):
  • kill -9 PRCOCESS_ID

ИЛИ

Используйте одну команду, чтобы закрыть все запущенные процессы node.

ps aux | awk '/node/{print $2}' | xargs kill -9

Ответ 3

Экземпляр, вероятно, все еще работает. Это исправит это.

killall node

Обновление: эта команда будет работать только на Linux/Ubuntu и Mac.

Ответ 4

Если вы работаете в Linux, эта проблема также может возникнуть, если Nodejs не запущен от имени пользователя root.

Изменить от этого:

nodejs /path/to/script.js

К этому:

sudo nodejs /path/to/script.js

Просто случилось со мной, и ни одно из других предложений здесь не исправило это. К счастью, я вспомнил, что скрипт работал на днях при запуске от имени пользователя root. Надеюсь, это поможет кому-то!

Отказ от ответственности: это, вероятно, не лучшее решение для продакшен среды. Запуск службы с правами root может привести к появлению некоторых дыр в безопасности вашего сервера/приложения. В моем случае это было решение для местной службы, но я бы посоветовал другим потратить больше времени, пытаясь изолировать причину.

Ответ 5

Это потому, что порт, который вы используете для запуска скрипта, уже используется. Вы должны остановить все другие узлы, которые используют этот пост. для этого вы можете проверить все узлы по

ps -e

ИЛИ для процесса узла используйте только ps -ef | grep node ps -ef | grep node Это даст вам список всех процессов узла с id

Убить весь процесс узла

sudo killall -9 node

Или для конкретного идентификатора sudo kill -9 id

Ответ 6

Я исправил ошибку, изменив порт, который был

app.set('port', process.env.PORT || 3000);<br>

и изменился на:

app.set('port', process.env.PORT || 8080);<br>

Ответ 7

Используемый порт Node может быть использован другой программой. В моем случае это было ntop, которое я недавно установил. Мне пришлось открыть http://localhost:3000/ в браузере, чтобы реализовать его. Другой способ найти этот процесс - здесь.

Ответ 8

Если вы хотите использовать тот же номер порта, введите kill % в терминал, который убивает текущий фоновый процесс и освобождает порт для дальнейшего использования.

Ответ 9

это означает, что ваш файл запущен. просто введите ниже код и попробуйте снова:

sudo pkill node

Ответ 10

Закройте все остальные серверы node, которые запущены, даже если они находятся в других терминальных окнах или работают на разных портах. Это должно решить проблему.

Ответ 11

Если вы пытались убить все экземпляры node и другие службы, прослушивающие 3000 (по умолчанию, используемые функцией экспресс-скелета), безрезультатно, вы должны проверить, чтобы ваша среда не определяла "порт" на быть чем-то неожиданным. В противном случае вы, вероятно, получите ту же ошибку. В файле app.js с выраженным скелетом вы увидите строку 15:

app.set('port', process.env.PORT || 3000);

Ответ 12

Чтобы исправить это, завершите или закройте сервер, на котором вы работаете. Если вы используете Eclipse IDE, выполните следующие действия:

Запустить > Отладка

enter image description here

Щелкните правой кнопкой мыши текущий процесс и нажмите Завершить.

Ответ 13

Причина этой ошибки

Какой-то другой процесс уже запущен на указанном вами порту

Простое и быстрое решение

В ОС Linux, например, вы указали 3000 в качестве порта

  • Откройте терминал и запустите lsof -i :3000. Если какой-либо процесс уже запущен на порте 3000, вы увидите эту печать на консоли

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    16615 aegon   13u  IPv6 183768      0t0  TCP *:3000 (LISTEN)

Ответ 14

В моем случае мне пришлось запустить vagrant reload. Даже без процессов node, выполняющих мое экспресс-приложение на моей виртуальной машине, я все еще получал эту ошибку до перезагрузки брандмауэра.

Ответ 15

Остановить службу, использующую этот порт.

sudo service NAMEOFSERVICE stop

Ответ 16

В моем случае проблема была вызвана забыванием вызвать next() в вызове метода expressjs `use '.

Если текущее промежуточное ПО не завершает цикл запроса-ответа, он должен вызвать next() для передачи управления следующему промежуточному программному обеспечению, иначе запрос будет оставлен.

http://expressjs.com/guide/using-middleware.html

Ответ 18

Вы также можете изменить порт из Gruntfile.js и снова запустить.

Ответ 19

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

До:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});
app.listen(port, () => {
  console.log("We are live on " + port);
});

После:

MongoClient.connect(db.url, (err, database) => {
  if (err) return console.log(err);
  require('./app/routes')(app, database);

  app.listen(port, () => {
    console.log('We are live on ' + port);
  });
});

require('./app/routes')(app, {});

Ответ 20

У меня была та же проблема, и я узнал, что процесс nodejs, который я ранее отменил с помощью CTRL + C, все еще работает. Проблема в Windows 10 заключается в том, что Ctrl + C не убивает изящно nodejs. Я открыл диспетчер задач и убил процесс вручную. Решения, представленные на GitHub, не спомогли мне.

Ответ 21

Если вы используете Windows, то вы можете завершить процесс из диспетчера задач для node.js

Ответ 22

events.js: 183 throw er; //необработанное событие error

Я также получил такую же проблему и перепробовал много способов, но в конце концов получил это, это работает хорошо:

npm install [email protected] --save-dev --save-exact

Обратитесь по этой ссылке для получения дополнительной информации https://github.com/ionic-team/ionic-cli/issues/2922.

Ответ 23

Ни один из ответов не сработал для меня.

Когда я перезагрузил компьютер, я смог запустить сервер.

макинтош
shutdown now -r

Linux
sudo shutdown now -r

Ответ 24

На самом деле клавиши Ctrl + C не освобождают порт, используемый процессом узла. Так что есть эта ошибка. Решением этой проблемы было использование следующего фрагмента кода в server.js:

process.on('SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit(1);
});

Это сработало для меня.

Вы также можете проверить другие решения, упомянутые в Graceful shutdown в NodeJS.

Ответ 25

→ проверьте, что работает на порте 8080 или на каком порте вы хотите проверить

lsof -i @localhost:8080

если что-то работает, вы можете закрыть его или использовать команду kill, чтобы закрыть его

Ответ 26

Просто проверьте свой объект в коде Visual Studio. Поскольку я запускал свое приложение для узлов и я переводил компьютер в спящий режим, то на следующее утро я снова включил свой ноутбук в разработку программного обеспечения. Затем я снова запускаю команду nodemon app.js. Первый waa запускается с ночи, а второй запускает мою последнюю команду, поэтому две командные подсказки прослушивают одни и те же порты, поэтому вы получаете эту проблему. Просто закройте один терминал или все терминалы, затем запустите ваш узел app.js или nodemon app.js

Ответ 27

Порт, который вы слушаете, уже прослушивается другим процессом.

Когда я столкнулся с этой ошибкой, я убил процесс с помощью Windows PowerShell (потому что я использовал Windows)

  1. Список элементовоткрыть Windows PowerShell
  2. введите ps, и тогда вы сможете получить список процессов
  3. найдите процесс с именем node и запишите Id
  4. тип Stop-process <Id> Я думаю, что это помощь для пользователей Windows

Ответ 28

Просто измените свой порт, возможно, ваш текущий порт используется iis или каким-либо другим сервером.

Ответ 29

Попробуйте следующие исправления.

  1. Попробуйте закрыть процесс, который использует ваш порт.

    netstat -tulnp | grep <port_number>

  2. Установка ниже pakcage исправил это для меня навсегда.

    npm install [email protected] --save-dev --save-exact

  3. Запустите эту команду в своем терминале:

    echo fs.inotify.max_user_watches=524288 | sudo tee -a/etc/sysctl.conf && sudo sysctl -p

    Для Arch Linux добавьте эту строку в /etc/sysctl.d/99-sysctl.conf:

    fs.inotify.max_user_watches=524288

    Затем выполните:

    sysctl --system

    Это также будет сохраняться при перезагрузке.

    https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details