it-roy-ru.com

ExpressJS - выбросить событие необработанной ошибки

Я создал приложение 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)

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

162
JR Galia

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

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

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

netstat -tulnp | grep <port no>
377
Glowin

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

  • pS Aux | grep узел
  • Найдите идентификатор процесса (второй слева):
  • убить -9 PRCOCESS_ID 

ИЛИ ЖЕ

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

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

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

killall node

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

23
TawabG

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

Правка от этого:

nodejs /path/to/script.js

К этому:

Sudo nodejs /path/to/script.js

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

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

13
CauselessEffect

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

ps -e

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

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

Sudo killall -9 node

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

10
Abhinav bhardwaj

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

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

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

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

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

3
Fabien

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

Sudo pkill node
2
a.miadian

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

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

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

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

2
Janith Udara

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

2
Suneha Javid

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

1
Jake McGuire

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

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

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

Выполнить> Отладка

enter image description here

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

1
Prashanth Sams

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

0
Gregor Weichbrodt

Остановите службу, которая использует этот порт.

Sudo service NAMEOFSERVICE stop
0
Rick

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

lsof -i @localhost:8080

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

0
rabiaasif

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

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

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

Linux
Sudo shutdown now -r

0
tmmgarcia

После многократного уничтожения одного и того же процесса и неспособности определить, что еще было запущено на порту 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, {});
0
Andrew Southard

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

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

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

0
Andrew Dwyer

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

http://www.codingdefined.com/2015/09/how-to-solve-nodejs-error-listen.html

Просто измените номер порта из свойств проекта.

0
mukulsharma1146

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

0
Narendra Solanki

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

0
cbaigorri

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

0
CodeRider

На самом деле клавиши 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);
});

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

Вы также можете проверить другие решения, упомянутые в Изящное завершение работы в NodeJS

0
Pankaj Shinde