Se eu executar um servidor com a porta 80 e tentar usar xmlHTTPrequest, recebo este erro:Error: listen EADDRINUSE
Por que é um problema para o nodejs, se eu quero fazer uma solicitação, enquanto executo um servidor na porta 80? Para os navegadores da web, não há problema: posso navegar na internet enquanto o servidor está em execução.
O servidor é:
net.createServer(function (socket) {
socket.name = socket.remoteAddress + ":" + socket.remotePort;
console.log('connection request from: ' + socket.remoteAddress);
socket.destroy();
}).listen(options.port);
E o pedido:
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
sys.puts("State: " + this.readyState);
if (this.readyState == 4) {
sys.puts("Complete.\nBody length: " + this.responseText.length);
sys.puts("Body:\n" + this.responseText);
}
};
xhr.open("GET", "http://mywebsite.com");
xhr.send();
javascript
node.js
Danny Fox
fonte
fonte
Respostas:
EADDRINUSE
significa que o número da porta quelisten()
tenta ligar o servidor já está em uso.Portanto, no seu caso, já deve estar executando um servidor na porta 80.
Se você tiver outro servidor da web em execução nessa porta, deverá colocar o node.js por trás desse servidor e proxy por meio dele.
Você deve verificar o
listening
evento como este, para ver se o servidor está realmente ouvindo:fonte
O que realmente me ajudou foi:
Mas isso matará um processo do sistema.
Com
você pode verificar se funcionou.
fonte
ps aux | grep node
mostraria isso. Em vez de matar a aplicação com CTRL + Z , sair da aplicação com CTRL + C . Isso sai do aplicativo normalmente e a ligação da porta é removida.O mencionado
killall -9 node
, sugerido por Patrick, funciona conforme o esperado e resolve o problema, mas você pode ler a parte de edição desta resposta sobre o porquê.kill -9
não ser a melhor maneira de fazê-lo.Além disso, convém direcionar um único processo, em vez de matar cegamente todos os processos ativos.
Nesse caso, primeiro obtenha o ID do processo (PID) do processo em execução nessa porta (por exemplo, 8888):
lsof -i tcp:8888
Isso retornará algo como:
Então faça (ps - na verdade não . Por favor, continue lendo abaixo):
kill -9 57385
Você pode ler um pouco mais sobre isso aqui .
Edição: Eu estava lendo sobre um tópico bastante relacionado hoje e me deparei com este tópico interessante sobre por que eu não deveria
kill -9
um processo .Portanto, como declarado, você deve matar melhor o processo acima com:
kill -15 57385
EDIT 2 : Como observado em um comentário por aqui muitas vezes, esse erro é consequência de não sair de um processo normalmente. Isso significa que muitas pessoas saem de um comando de nó (ou qualquer outro) usando CTRL + Z . A maneira correta de interromper um processo em execução é emitir o CTRL + C comando que executa uma saída limpa.
Sair de um processo da maneira correta liberará essa porta ao desligar. Isso permitirá que você reinicie o processo sem ter o trabalho de matá-lo antes de poder executá-lo novamente.
fonte
pgrep node
mostra se algum processo do nó foi executado em você.pkill node
vai matá-los.Às vezes, o Skype às vezes escuta na porta 80 e, portanto, causa esse erro se você tentar escutar na porta 80 o Node.js ou qualquer outro aplicativo.
Você pode desativar esse comportamento no Skype acessando as opções e clicando em Avançado -> Conexão -> Usar porta 80 (Desmarque isso)
fonte
Você deve tentar matar o processo que está escutando na porta 80.
Killall matará todos os aplicativos do nó em execução. Você pode não querer fazer isso. Com este comando, você pode matar apenas o aplicativo que está escutando em uma porta conhecida.
Se estiver usando o unix, tente este comando:
fonte
Duas soluções possíveis para Windows / Mac
1. Número da Porta Livre
janelas
Mac
Você pode tentar o netstat
Para OSX El Capitan e mais recente (ou se o seu netstat não suportar -p), use lsof
se isso não resolver o seu problema, os
Mac
usuários poderão consultar a discussão completa sobre esse problema Localizar (e matar) o processo bloqueando a porta 3000 no Mac2. Alterar número da porta?
janelas
Mac
fonte
netstat -ona | findstr ".0:PORT +0.0.0.0:0 +LISTENING" | for /f "tokens=5" %t in ('more') do taskkill /PID:%t /f
Sob um ambiente de controlador, você pode usar:
pkill node
Antes de executar seu script, faça o trabalho.Tenha em mente que este comando matará todos os
node
processos, o que pode estar correto se você tiver, por exemplo, um contêiner executando apenas uma instância, ou seja, você possui um ambiente onde pode garantir isso.Em qualquer outro cenário, recomendo o uso de um comando para eliminar um determinado ID ou nome de processo encontrado, procurando-o programaticamente. como se seu processo fosse chamado node-server-1, você poderia fazer
pkill node-server-1
.Este recurso pode ser útil para entender: https://www.thegeekstuff.com/2009/12/4-ways-to-kill-a-process-kill-killall-pkill-xkill/
fonte
pgrep node
antes da mão se você quiser ser um pouco cuidadoso e ver o quenode
os processos estão funcionandoSeu aplicativo já está sendo executado nessa porta 8080. Use este código para matar a porta e execute seu código novamente
fonte
kill -9
é quase certamente um exagero e, na minha opinião, um conselho horrível para dar sem avisos específicos sobre isto. Apenaskill
provavelmente faria o truque, e realmente, o problema fundamental nesta questão é, eu acho, que eles estão tentando re-executar um servidor de uma e outra vez, de modo que este é apenas um truque, não uma solução. Eles precisam ter uma melhor compreensão do que está acontecendo, o que esta resposta realmente não fornece.Outra coisa que pode dar esse erro é dois servidores HTTP no mesmo código do nó. Eu estava atualizando algum código do Express 2 para o Express 3 e tinha isso ...
E, desencadeou esse erro.
fonte
Isso funciona para mim (eu estou usando mac). Execute este comando
lsof -PiTCP -sTCP:LISTEN
Isso exibirá uma lista de portas que seu syetem está usando. Encontre o
PID
que seu nó está executandoe corra
kill -9 [YOUR_PID]
fonte
EADDRINUSE
significa que a porta (que tentamos ouvir no aplicativo do nó) já está sendo usada. Para superar, precisamos identificar qual processo está sendo executado com essa porta.Por exemplo, se estamos tentando ouvir nosso aplicativo de nó na porta 3000. Precisamos verificar se essa porta já está sendo usada por qualquer outro processo.
passo 1:
Que o comando acima fornece o resultado abaixo.
passo 2:
Agora você tem o ID do processo (25315), mate esse processo.
etapa 3:
Nota: Esta solução para usuários Linux.
fonte
fonte
por força de matar
use o cmd acima para matar uma porta específica e execute o servidor
fonte
Experimente os dois comandos e ele interromperá todo o processo do nó.
fonte
Este erro ocorre quando você tem algum processo em execução em uma porta na qual deseja executar seu aplicativo.
como obter qual processo em execução nessa porta => comando: sudo netstat -ap | grep: 3000
saída: você obterá as informações do processo que estão usando essa porta
tcp 0 0 Endereço IP: 3000 : LISTEN 26869 / nó
Agora você pode matar esse processo sudo kill -9 26869
fonte
No comando abaixo, substitua seu portNumber
fonte
EADDRINUSE significa que a porta do aplicativo nodejs já está em uso.
fonte
Existe uma maneira de finalizar o processo usando o Gerenciador de tarefas:
Vá para o Gerenciador de tarefas (ou use o atalho Ctrl+ Shift+ Esc)
Em "Processos em segundo plano", localize os processos "Node.js" e finalize-os (clique com o botão direito do mouse e escolha "Finalizar tarefa")
fonte
Eu já vi esse erro antes (no nó) com http.client e, pelo que me lembro, o problema tinha a ver com não inicializar o httpClient ou definir opções incorretas na criação do httpClient e / ou na solicitação de URL.
fonte
Também tenho o mesmo problema e simplesmente fecho o terminal, abro um novo terminal e corro
novamente. isso funciona para mim, é necessário algum tempo para aguardar alguns segundos até que funcione novamente.
Mas isso funciona apenas em uma máquina de desenvolvedor em vez de em um console do servidor.
fonte
Erro: ouça EADDRINUSE significa que a porta que você deseja atribuir / ligar ao servidor de aplicativos já está em uso. Você pode atribuir outra porta ao seu aplicativo.
Ou se você deseja atribuir a mesma porta ao aplicativo. Em seguida, mate o aplicativo que está sendo executado na porta desejada.
Para um aplicativo de nó, o que você pode tentar é localizar o ID do processo para o aplicativo de nó:
Depois de obter a identificação do processo, faça
fonte
No Debian eu descobri que rodava na porta 80, você precisa emitir o comando como root, ie
Espero que ajude
fonte
No meu caso, o Apache HTTP Server foi executado na porta 80, resolvi-o emitindo o comando como root
sudo killall httpd
Atualizar
Se o Jenkin estiver instalado e em execução no seu Mac;
sudo lsof -i tcp:8080
sudo launchctl unload /Library/LaunchDaemons/org.jenkins-ci.plist
fonte
Parece que existe outro processo de nó a servir. Verifique digitando isso no seu console (Linux / Mac):
e saia com:
OU uso alternativo
para servir seu projeto em um porto livre de sua escolha.
fonte
Ao matar o NODE_PORT, ele pode matar o processo do Chrome ou qualquer coisa que esteja ouvindo a mesma porta, e isso é irritante.
Esse shell script pode ser útil - no meu caso, a porta é 1337, mas você pode alterá-la a qualquer momento
fonte
No meu caso, eu uso hospedagem na web, mas é o mesmo em host local, usei:
para assistir ao processo do nó, o console mostra o processo com PID. para matar o processo, você deve usar este comando:
onde PID é a identificação do processo do comando acima.
fonte
Dois servidores não podem escutar na mesma porta; portanto, verifique se outro servidor está escutando na mesma porta; verifique também a sincronização do navegador se estiver executando na mesma porta.
fonte
Para outras pessoas no Windows 10 com nó como
localhost
e executando em uma porta como 3500, não 80 ...O que não funciona:
O que mostra informações, mas ainda não funciona:
O que funciona:
Git Bash ou PowerShell no Windows
Observe o PID (extremo direito) que
eu não consegui
killall
trabalhar ... entãoAgora, após esse exercício não tão divertido no Windows, percebi que posso usar o gerenciador de tarefas e encontrar o mecanismo Node e finalizá-lo.
Para sua informação, eu estava usando o Visual Studio Code para executar o Node na porta 3500 e utilizava o shell Git Bash dentro do código VS. Eu saí graciosamente com Ctrl + C, mas às vezes isso não mata. Eu não quero mudar minha porta ou reiniciar, então isso funcionou. Espero que ajude os outros. Caso contrário, é documentação para mim.
fonte
Para usuários do Windows, execute o seguinte comando na janela do PowerShell para eliminar todos os processos do nó.
fonte
A opção que está funcionando para mim:
Corre:
Você receberá algo como:
fonte