Qué significa EADDRINUSE: address already in use y cómo solucionarlo
Referencia del error
EADDRINUSE: address already in use
Lenguaje
Severidad
AltaCuándo ocurre
EADDRINUSE se lanza en Node.js cuando un servidor intenta vincularse a un puerto que ya está ocupado por otro proceso.
Posibles soluciones
Encuentra y elimina el proceso que usa el puerto: lsof -i :<puerto> en macOS/Linux, o netstat -ano | findstr :<puerto> en Windows. Usa una variable de entorno para el número de puerto para que diferentes entornos puedan usar puertos distintos. Agrega un manejador de errores en el objeto servidor para fallar con un mensaje claro en lugar de un crash no manejado.
Errores relacionados
Más detalles
EADDRINUSE se lanza en Node.js cuando un servidor intenta vincularse a un puerto que ya está ocupado por otro proceso. El sistema operativo solo permite que un proceso escuche en un puerto dado a la vez.
Por qué ocurre
- •Una instancia anterior del mismo proceso servidor no terminó correctamente y sigue ocupando el puerto.
- •Una aplicación diferente (una base de datos, otro servidor de desarrollo, un proxy) ya está escuchando en ese puerto.
- •El hot-reload o el modo watch reinició el proceso antes de que el socket TCP anterior se liberara completamente.
- •Ejecutar múltiples conjuntos de tests o instancias de servidor en paralelo sin asignar puertos diferentes.
Posibles soluciones
Encuentra y elimina el proceso que usa el puerto: lsof -i :<puerto> en macOS/Linux, o netstat -ano | findstr :<puerto> en Windows. Usa una variable de entorno para el número de puerto para que diferentes entornos puedan usar puertos distintos. Agrega un manejador de errores en el objeto servidor para fallar con un mensaje claro en lugar de un crash no manejado.
Ejemplos
Código que causa el error
const http = require("http");
const server = http.createServer((req, res) => {
res.end("Hello");
});
server.listen(3000, () => console.log("Listening on port 3000"));Error en la terminal
Error: listen EADDRINUSE: address already in use :::3000
at Server.setupListenHandle [as _listen2] (node:net:1739:16)Código corregido
const http = require("http");
const PORT = process.env.PORT || 3000;
const server = http.createServer((req, res) => {
res.end("Hello");
});
server.on("error", (err) => {
if (err.code === "EADDRINUSE") {
console.error(`Port ${PORT} is in use. Kill the process or use a different port.`);
process.exit(1);
}
});
server.listen(PORT, () => console.log(`Listening on port ${PORT}`));Practica en inglés
¿Cómo le explicarías un EADDRINUSE: address already in use a un compañero dev? Elige la frase correcta:
"I hit an error...
¿Listo para practicar tu inglés en el trabajo?
Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.
Prueba Lingua-e gratis