524 votes

Comment corriger l'erreur : listen EADDRINUSE lors de l'utilisation de nodejs ?

Si j'exécute un serveur avec le port 80, et que j'essaie d'utiliser la fonction xmlHTTPrequest Je reçois cette erreur : Error: listen EADDRINUSE

Pourquoi est-ce un problème pour nodejs, si je veux faire une requête, alors que je fais tourner un serveur sur le port 80 ? Pour les navigateurs web, ce n'est pas un problème : je peux surfer sur Internet pendant que le serveur fonctionne.

Le serveur est :

  net.createServer(function (socket) {
    socket.name = socket.remoteAddress + ":" + socket.remotePort;
    console.log('connection request from: ' + socket.remoteAddress);
    socket.destroy();
  }).listen(options.port);

Et la demande :

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

625voto

Patrick Points 482

Ce qui m'a vraiment aidé, c'est :

killall -9 node

Mais cela va tuer un processus système.

Avec

ps ax

vous pouvez vérifier si ça a marché.

429voto

stewe Points 14623

EADDRINUSE signifie que le numéro du port qui listen() tente de lier le serveur est déjà utilisé.

Donc, dans votre cas, un serveur doit déjà fonctionner sur le port 80.

Si vous avez un autre serveur Web fonctionnant sur ce port, vous devez placer node.js derrière ce serveur et l'utiliser comme proxy.

Vous devez vérifier si le listening comme ceci, pour voir si le serveur est vraiment à l'écoute :

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

62voto

Rob Evans Points 1380

Pour information, Skype écoute parfois sur le port 80 et provoque donc cette erreur si vous essayez d'écouter sur le port 80 à partir de Node.js ou de toute autre application.

Vous pouvez désactiver ce comportement dans Skype en accédant aux options et en cliquant sur Avancé -> Connexion -> Utiliser le port 80 (décochez cette option).

Turn off Skype port 80 usage

P.S. Après avoir effectué cette modification, n'oubliez pas de redémarrer Skype !

17voto

Evan Carroll Points 13420

Une autre chose qui peut donner cette erreur, est deux serveurs HTTP dans le même code de nœud. Je mettais à jour un code Express 2 vers Express 3, et j'ai eu cette...

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});        

// tons of shit.

http.createServer(app).listen(app.get('port'), function(){            
  console.log('Express server listening on port ' + app.get('port')); 
});                                                                   

Et, ça a déclenché cette erreur.

3voto

ControlAltDel Points 7430

J'ai déjà vu cette erreur (dans node) avec http.client, et si je me souviens bien, le problème était lié à la non-initialisation du httpClient ou à la définition de mauvaises options dans la création du httpClient et/ou dans la requête url.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X