Como corrigir o erro: ouça EADDRINUSE enquanto usa nodejs?

Se eu executar um servidor com a porta 80, e eu tentar utilizar xmlHTTPrequest eu recebo este erro: `Error: listen EADDRINUSE''.

Por que é problema para nodejs, se eu quero fazer um pedido, enquanto eu executo um servidor na porta 80? Para os webbrowsers não é um problema: eu posso navegar na internet, enquanto o servidor está rodando.

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();
Solução

EADDRINUSE' significa que o número da porta que listen() tenta vincular o servidor já está em uso.

Portanto, no seu caso, já deve haver um servidor na porta 80.

Se você tem outro webserver rodando nesta porta, você tem que colocar o node.js atrás daquele servidor e procurá-lo através dele.

Você deve verificar se o evento 'listening' está realmente ouvindo:

var http=require('http');

var server=http.createServer(function(req,res){
    res.end('test');
});

server.on('listening',function(){
    console.log('ok, server is running');
});

server.listen(80);
Comentários (3)

Apenas um head's up, o Skype às vezes escuta na porta 80 e, portanto, causa esse erro se você tentar escutar na porta 80 do Node.js ou em qualquer outro aplicativo.

Você pode desligar esse comportamento no Skype acessando as opções e clicando em Advanced -> Connection -> Use a porta 80 (Desmarque esta opção)

P.S. Depois de fazer essa mudança, don'não se esqueça de reiniciar o Skype!

Comentários (5)

Eu já vi este erro antes (no nó) com o http.client, e como me lembro, o problema tinha a ver com não inicializar o httpClient ou definir opções ruins na criação do httpClient e/ou no pedido da url.

Comentários (1)