Comment résoudre l’erreur “Error EADDRINUSE (Node.js)”. Assistance immédiate gratuite




Comment résoudre l’erreur “Error EADDRINUSE (Node.js)”. Assistance immédiate gratuite






Erreur EADDRINUSE dans Node.js : Causes et Solutions

L'erreur EADDRINUSE dans Node.js se produit lorsqu'un port est occupé par un autre processus ou qu'une application ne se ferme pas correctement. Ce guide explique comment identifier et résoudre le conflit, ainsi que des méthodes de prévention telles que l'utilisation de ports dynamiques, des variables d'environnement et une gestion rigoureuse des erreurs.

Recommandé : Utilisez notre chatbot gratuit, spécialement conçu pour résoudre les problèmes techniques efficacement.

Points clés à retenir sur l’erreur EADDRINUSE dans Node.js :

  1. Cause principale : L’erreur EADDRINUSE survient lorsque Node.js tente de s’exécuter sur un port déjà utilisé par un autre processus.
  2. Résolution rapide : Identifier le processus en conflit avec des outils comme netstat, lsof ou tasklist, et le terminer avec la commande appropriée.
  3. Prévention : Configurer votre application pour utiliser des ports dynamiques ou gérez des erreurs via un code de traitement intelligent.
  4. Bonnes pratiques : Utiliser des variables d’environnement et assurer une fermeture propre de votre serveur.

Étape 1 : Comprendre l’erreur EADDRINUSE

  • L’erreur EADDRINUSE signifie que l’adresse réseau (port) que votre application tente d’utiliser est déjà occupée. Cela peut arriver si un autre processus utilise ce port, ou si votre application ne s’est pas correctement arrêtée.

Étape 2 : Identifier le processus en conflit

Sous Linux ou macOS :

  1. Ouvrez un terminal et utilisez la commande suivante pour lister les processus utilisant le port problématique :

    sudo lsof -i :<port_number>
    

    Exemple pour le port 3000 :

    sudo lsof -i :3000
    
  2. Alternativement, vous pouvez utiliser netstat :

    sudo netstat -tulpn | grep :<port_number>
    

    Exemple :

    sudo netstat -tulpn | grep :3000
    

Sous Windows :

  1. Ouvrez le terminal Windows (cmd ou PowerShell) en mode administrateur.

  2. Exécutez netstat pour trouver le PID (Process ID) :

    netstat -ano | findstr :<port_number>
    

    Exemple pour le port 3000 :

    netstat -ano | findstr :3000
    
  3. Identifiez le processus dans la liste avec son PID.


Étape 3 : Terminer le processus utilisant le port

Sous Linux/macOS :

  1. Utilisez kill pour arrêter le processus identifié par son PID :

    kill <PID>
    

    Exemple :

    kill 1234
    
  2. Si le processus ne se termine pas, forcez-le avec kill -9 :

    kill -9 <PID>
    

Sous Windows :

  1. Recherchez le processus lié au PID avec la commande suivante :

    tasklist | findstr <PID>
    

    Exemple :

    tasklist | findstr 1234
    
  2. Terminez le processus à l’aide de taskkill :

    taskkill /PID <PID> /F
    

    Exemple :

    taskkill /PID 1234 /F
    

Étape 4 : Modifier votre application pour éviter l’erreur

  1. Utiliser un port alternatif : Modifiez le port dans le code si le port par défaut est occupé. Par exemple :

    const PORT = process.env.PORT || 3001;
    const server = app.listen(PORT, () => {
        console.log(`Server is running on port ${PORT}`);
    });
    
  2. Allouer un port dynamique : Laissez le système attribuer un port disponible en passant 0 comme port :

    const server = app.listen(0, () => {
        console.log('Server is running on port:', server.address().port);
    });
    

Étape 5 : Implémenter la gestion des erreurs dans votre code

Ajouter un gestionnaire d’événements pour capturer l’erreur avant qu’elle ne provoque l’arrêt de votre application :

server.on('error', (err) => {
    if (err.code === 'EADDRINUSE') {
        console.error(`Port ${PORT} already in use. Retrying...`);
        setTimeout(() => {
            server.close();
            server.listen(PORT);
        }, 1000);
    }
});

Étape 6 : Fermer correctement l’application

Assurez-vous que le serveur se ferme proprement, surtout en cas d’interruption (Signal SIGINT ou SIGTERM) :

process.on('SIGINT', () => {
    console.log('Gracefully shutting down...');
    server.close(() => {
        console.log('Server closed');
        process.exit(0);
    });
});

Étape 7 : Tester et valider

  1. Terminez toutes les instances Node.js en cours :

    • Sur Linux/macOS :
      pkill -f node
      
    • Sur Windows :
      taskkill /IM node.exe /F
      
  2. Redémarrez votre application. Si le problème persiste, revisitez les étapes ci-dessus pour identifier d’autres possibles conflits.


Liens utiles


Foire aux questions (FAQ)

1. Puis-je éviter complètement l’erreur EADDRINUSE ?

En suivant de bonnes pratiques telles que l’utilisation de ports dynamiques, la fermeture correcte du serveur et des variables d’environnement, vous réduirez considérablement les occurrences de cette erreur.

2. Existe-t-il des outils pour automatiser la gestion des ports ?

Oui. Vous pouvez utiliser des bibliothèques comme portfinder pour scanner et assigner automatiquement un port libre :

npm install portfinder

Code :

const portfinder = require('portfinder');

portfinder.getPort((err, port) => {
    if (err) throw err;
    const server = app.listen(port, () => {
        console.log(`Server running on port ${port}`);
    });
});

3. Le port est libre mais l’erreur persiste, pourquoi ?

Cela peut se produire si le processus utilisant le port ne se ferme pas immédiatement. Essayez d’augmenter le délai entre deux lancements du serveur.

4. Pourquoi devrais-je utiliser des variables d’environnement ?

Les variables d’environnement permettent de gérer vos configurations (comme les ports) de manière centralisée, simplifiant le déploiement dans différents environnements (développement, test, production).


L’erreur EADDRINUSE est courante, mais facile à résoudre. Avec un peu de vigilance et les pratiques partagées ici, vous assurerez une exécution fluide de vos applications Node.js.