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 :
- Cause principale : L’erreur
EADDRINUSE
survient lorsque Node.js tente de s’exécuter sur un port déjà utilisé par un autre processus. - Résolution rapide : Identifier le processus en conflit avec des outils comme
netstat
,lsof
outasklist
, et le terminer avec la commande appropriée. - Prévention : Configurer votre application pour utiliser des ports dynamiques ou gérez des erreurs via un code de traitement intelligent.
- 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 :
-
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
-
Alternativement, vous pouvez utiliser
netstat
:sudo netstat -tulpn | grep :<port_number>
Exemple :
sudo netstat -tulpn | grep :3000
Sous Windows :
-
Ouvrez le terminal Windows (cmd ou PowerShell) en mode administrateur.
-
Exécutez
netstat
pour trouver le PID (Process ID) :netstat -ano | findstr :<port_number>
Exemple pour le port 3000 :
netstat -ano | findstr :3000
-
Identifiez le processus dans la liste avec son PID.
Étape 3 : Terminer le processus utilisant le port
Sous Linux/macOS :
-
Utilisez
kill
pour arrêter le processus identifié par son PID :kill <PID>
Exemple :
kill 1234
-
Si le processus ne se termine pas, forcez-le avec
kill -9
:kill -9 <PID>
Sous Windows :
-
Recherchez le processus lié au PID avec la commande suivante :
tasklist | findstr <PID>
Exemple :
tasklist | findstr 1234
-
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
-
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}`); });
-
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
-
Terminez toutes les instances Node.js en cours :
- Sur Linux/macOS :
pkill -f node
- Sur Windows :
taskkill /IM node.exe /F
- Sur Linux/macOS :
-
Redémarrez votre application. Si le problème persiste, revisitez les étapes ci-dessus pour identifier d’autres possibles conflits.
Liens utiles
- Documentation officielle Node.js
- Outils recommandés :
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.