Ошибка EADDRINUSE: Как вы запускаете nodemon с express, чтобы он не прослушивал порт, который уже используется? - PullRequest
0 голосов
/ 25 февраля 2020

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

Проблема, с которой я сталкиваюсь:

Ошибка: прослушивание EADDRINUSE: адрес уже используется ::: 5000

Я думаю, что ошибка происходит потому что nodemon повторно запускает express, когда происходит обновление. index.js:

const server = app.listen(process.env.PORT || 5000, () => {
  console.log('Express server listening on port %d in %s mode', server.address().port, app.settings.env);
});

Я пробежал несколько кроличьих ям, которые включают родительские и дочерние «процессы» (https://dev.to/kyrelldixon/how-to-setup-an-express-js-server-in-node-js-56hp)

И / или это похоже, это может быть какая-то ошибка из-за обновления (https://github.com/remy/nodemon/issues/1025)

Я даже думал о добавлении какого-то обратного вызова в .listen, поэтому приложение проверяет, является ли или не работает порт (http://expressjs.com/en/5x/api.html#app .listen_path_callback )

Но, в конечном счете, не уверен, как выяснить проблему. Кто-нибудь может дать какое-нибудь руководство?

мои настройки:

npm -v
1.5.0
node -v
v10.16.3
nodemon -v
v2.0.2
express -v
v4.16.0

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

добавление чего-то вроде

process.on(‘SIGINT’, () => { console.log(“exiting…“); process.exit(); });

process.on(‘exit’, () => { console.log(“exiting…“); process.exit(); });

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

0 голосов
/ 25 февраля 2020

Это происходит, когда служба уже работает и получает этот порт.

Иногда, когда вы выходите из приложения с Ctrl-c, процесс не завершается полностью и продолжает работать в фоновом режиме.

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

    netstat -tulnp | grep '<port number>'

enter image description here

Будет выглядеть примерно так ^^

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

57997 в моем случае

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

...