ExpressJS - throw er Evento de erro não tratado

180

Criei o aplicativo expressjs usando os seguintes comandos:

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

Quando executo o aplicativo com node app.js:, tenho os seguintes erros:

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)

Como corrigi-lo?

JR Galia
fonte
30
EADDRINUSE significa que a porta já está em uso. tente alterar em qual porta o servidor da Web no app.js escuta ou elimina o que estiver usando atualmente essa porta, se você não precisar.
go-oleg
Se a porta de fechamento não estiver
corrigida

Respostas:

400

Você executou outro servidor usando a mesma porta como 8080.

Talvez você tenha executado node appem outro shell, feche-o e execute novamente.

Você pode verificar PORT no. está disponível ou não está usando

netstat -tulnp | grep <port no>

Como alternativa, você pode usar lsof :

lsof -i :<port no>
Glowin
fonte
4
Corri para isso usando o WebStorm. Eu tive duas sessões de depuração abertas no mesmo espaço de trabalho. Doh!
quer
53
Um erro tão comum realmente merece uma mensagem de erro melhor.
Tamlyn
Isso aconteceu comigo ao usar o node-activeedirectory. Meu baseDN estava ausente no subdomínio. baseDN: 'ldap: // dc = subdomínio, dc = domain, dc = com'
Mark
Estava executando uma instância de rails server...: |
precisa saber é o seguinte
1
no mac high sierra: lsof -nP -i4TCP: $ PORT | grep ESCUTE
Roee 19/07
61

Nós recebemos um erro semelhante quando executamos nosso aplicativo expresso. Temos que seguir o mesmo nesse caso. Precisamos verificar se está funcionando em algum terminal. Se você deseja localizar e interromper o processo, siga estas etapas:

  • ps aux | nó grep
  • Encontre o ID do processo (segundo da esquerda):
  • kill -9 PRCOCESS_ID

OU

Use um único comando para fechar todos os processos do nó em execução.

ps aux | awk '/node/{print $2}' | xargs kill -9
monical
fonte
5
ps aux | grep node | awk '{print $2}' | xargs kill -9
Daniel
killall -r node(linux)
jt3k 21/01
25

Uma instância provavelmente ainda está em execução. Isso vai consertar.

killall node

Atualização: Este comando só funciona no Linux / Ubuntu e Mac.

TawabG
fonte
1
killall -9 nó
Pankaj Shinde
16

Se você estiver no Linux, esse problema também pode ocorrer se o Nodejs não estiver sendo executado como root.

Mude a partir disso:

nodejs /path/to/script.js

Para isso:

sudo nodejs /path/to/script.js

Aconteceu comigo e nenhuma das outras sugestões aqui o corrigiu. Felizmente, lembrei-me de que o script estava funcionando outro dia quando rodava como root. Espero que isso ajude alguém!

Isenção de responsabilidade: Essa provavelmente não é a melhor solução para um ambiente de produção. Iniciar o serviço como root pode introduzir algumas falhas de segurança no seu servidor / aplicativo. No meu caso, essa era uma solução para um serviço local, mas eu encorajaria outras pessoas a gastar mais tempo tentando isolar a causa.

CauselessEffect
fonte
1
Parece realmente perigoso apenas executar o script como raiz para resolver esse problema. A menos que você esteja tentando ligar a uma porta abaixo de 1024, nunca precisará executar o nó como root. Eu suspeito que, no seu caso, você está tentando vincular à porta 80 ou 443. Sugiro usar o Nginx para direcionar o tráfego dessas portas para o nodejs em uma porta superior, como 8000 ou algo assim.
varikin
1
Obrigado por apontar isso. Eu não acho que o script específico que eu estava usando exigisse nenhuma dessas portas, certamente não estou usando o Node como um servidor http. Talvez tenha sido um dos módulos que usei que exigisse permissões adicionais? Peço desculpas, já faz um tempo, por isso não tenho certeza de qual script pediu essa solução. Vou adicionar um aviso de isenção de responsabilidade sobre a tentativa em um ambiente de produção.
CauselessEffect
12

Isso ocorre porque a porta que você está usando para executar o script já está em uso. Você precisa parar todos os outros nós que estão usando essa postagem. para isso, você pode verificar todos os nós

ps -e

OU apenas para o processo do nó usar ps -ef | grep node Isso fornecerá a lista de todos os processos do nó com o ID

matar todo processo de nó

sudo killall -9 node

Ou para o ID específico sudo kill -9 id

Abhinav bhardwaj
fonte
você salvou minha noite!
Mujtaba Mahmood 10/10
8

Corrigi o bug alterando a porta que estava

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

e alterado para:

app.set('port', process.env.PORT || 8080);<br>
marcdahan
fonte
1
Como isso difere da aplicação do que a resposta aceita diz à resposta dada por Marcos?
EWit
3

A porta que o Node está tentando usar já pode ser usada por outro programa. No meu caso, foi o ntop , que eu havia instalado recentemente. Eu tive que abrir http: // localhost: 3000 / em um navegador para realizá-lo. Outra maneira de encontrar o processo é dada aqui .

Fabien
fonte
2

Se você deseja usar o mesmo número de porta, digite kill %o terminal, que encerra o processo em segundo plano atual e libera a porta para uso posterior.

Suneha Javid
fonte
2

isso significa que seu arquivo está sendo executado agora. basta digitar o código abaixo e tente novamente:

sudo pkill node
Abolfazl Miadian
fonte
1

Feche qualquer outro servidor de nó em execução, mesmo que esteja em outras janelas do terminal ou em portas diferentes. Isso deve resolver o problema.

Jake McGuire
fonte
1

Se você tentou matar todas as instâncias de nó e outros serviços que atendiam ao 3000 (o padrão usado pela configuração do esqueleto expresso) sem sucesso, verifique se o seu ambiente não está definindo 'porta' como algo inesperado. Caso contrário, você provavelmente receberá o mesmo erro. No arquivo app.js do esqueleto expresso, você notará a linha 15:

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

Para corrigir isso, encerre ou feche o servidor que você está executando. Se você estiver usando o Eclipse IDE, siga isto,

Executar> Depurar

insira a descrição da imagem aqui

Clique com o botão direito do mouse no processo em execução e clique em Terminar .

Prashanth Sams
fonte
1

events.js: 183 lançados; // Evento 'error' não tratado

Eu também tive o mesmo tipo de problema e tentei de várias maneiras, mas finalmente consegui isso, isso funciona bem:

npm install ws@3.3.2 --save-dev --save-exact

Consulte este link para obter mais esclarecimentos https://github.com/ionic-team/ionic-cli/issues/2922

Janith Udara
fonte
1

Na verdade, as teclas Ctrl + C não liberam a porta usada pelo processo do nó. Portanto, existe este erro. A solução para o problema estava usando o seguinte snippet de código no server.js:

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

Isso funcionou para mim.

Você também pode procurar outras soluções mencionadas em Encerramento gracioso no NodeJS

Pankaj Shinde
fonte
1

Razão para este erro

Algum outro processo já está em execução na porta que você especificou

Solução simples e rápida

No sistema operacional Linux, por exemplo, você especificou 3000 como a porta

  • Abra o terminal e corra lsof -i :3000. Se algum processo já estiver em execução na porta 3000, você verá esta impressão no console

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

  • Copie o PID (ID do processo) da saída

  • Executar sudo kill -9 16615(você deve colocar o PID após -9)

  • Inicie o servidor novamente
Hadi Mir
fonte
0

No meu caso, eu tive que correr vagrant reloadtambém. Mesmo sem processos de nó executando meu aplicativo expresso na minha máquina virtual, eu ainda estava recebendo esse erro até recarregar a caixa de vagabundo.

cbaigorri
fonte
0

Pare o serviço que está usando essa porta.

sudo service NAMEOFSERVICE stop
Rick
fonte
0

No meu caso, o problema foi causado pelo esquecimento de chamar next()uma chamada de método expressjs `use '.

Se o middleware atual não encerrar o ciclo de solicitação-resposta, ele deverá chamar next () para passar o controle para o próximo middleware, caso contrário, a solicitação será interrompida.

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

Andrew Dwyer
fonte
0

Você também pode alterar a porta do Gruntfile.js e executar novamente.

Narendra Solanki
fonte
0

Depois de matar o mesmo processo várias vezes e não conseguir localizar o que mais estava sendo executado na porta 8000, percebi que estava tentando executar na porta 8000 duas vezes:

Antes:

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);
});

Depois de:

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, {});
Andrew Southard
fonte
0

Eu tive o mesmo problema e descobri que um processo nodejs que eu havia cancelado anteriormente com CTRL + C ainda estava em execução. O problema no Windows 10 é que Ctrl + C não mata graciosamente nodejs. Abri o gerenciador de tarefas e matei o processo manualmente. As soluções fornecidas no GitHub não funcionaram para mim.

Gregor Weichbrodt
fonte
0

Se você estiver usando o Windows, poderá finalizar o processo no gerenciador de tarefas do node.js

CodeRider
fonte
0

Nenhuma das respostas funcionou para mim.

Quando reiniciei o computador, pude colocar o servidor em funcionamento.

Mac
shutdown now -r

Linux
sudo shutdown now -r

tiagomenegaz
fonte
0

-> verifique o que está sendo executado na porta 8080 ou qual porta você deseja verificar

lsof -i @localhost:8080

se algo estiver rodando, você pode fechá-lo ou usar algum comando kill para fechá-lo

rabiaasif
fonte
0

Simples, basta verificar seu teminal no Visual Studio Code. Como eu estava executando meu aplicativo de nó e hibernava meu laptop, na manhã seguinte ligo meu laptop de volta ao desenvolvimento de software. ENTÃO, eu executo o comando novamente nodemon app.js O primeiro foi executado a partir da noite e o segundo estava executando o meu comando mais recente, de modo que dois prompts de comando estão ouvindo as mesmas portas e é por isso que você está recebendo esse problema. Simples Feche um termianl ou todos os terminais e execute o nó app.js ou nodemon app.js

zaib
fonte
0

A porta que você está ouvindo já está sendo ouvida por outro processo.

Quando enfrentei esse erro, interrompi o processo usando o Windows PowerShell (porque usei o Windows)

  1. Item da listaabre o windows powershell
  2. digite pse então você pode obter uma lista de processos
  3. encontre o processo chamado e observe o ID
  4. tipo Stop-process <Id> eu acho que é ajuda para usuários do windows
Anush
fonte
0

Encontrei o mesmo problema hoje e a porta não foi usada. A seguinte abordagem ajudou:

rm -rf node_modules && npm cache clean && npm install
npm start
seb_dom
fonte
0

Se estiver no mac, é tudo sobre o IP do x86_64-apple-darwin13.4.0. Se você seguir os erros, isso será algo relacionado ao x86_64-apple-darwin13.4.0. Adicionar

127.0.0.1 x86_64-apple-darwin13.4.0

para o arquivo / etc / hosts . Então o problema se foi

Shravan
fonte
-1

Basta alterar sua porta, pode ser que sua porta atual esteja sendo usada pelo iis ou por outro servidor.

Akash
fonte
Isso foi perguntado e respondido há 4 anos com a mesma resposta, mas melhor.
George