¿Qué es el error EADDRINUSE en Desarrollo?
El error EADDRINUSE (Address already in use) es uno de los problemas más comunes a los que se enfrentan los desarrolladores de Node.js y JavaScript. Ocurre cuando intentas iniciar un servidor web en un puerto específico (por ejemplo, el puerto 3000 o 8080), pero ese puerto ya está siendo utilizado por otro proceso en tu sistema operativo.
Causas principales del error
- Una instancia anterior de tu aplicación sigue ejecutándose en segundo plano.
- Otro servicio o aplicación en tu ordenador está utilizando exactamente el mismo puerto.
- Cierre abrupto de la terminal sin detener correctamente el servidor Node.js.
Método 1: Identificar y matar el proceso en sistemas Unix (Linux y macOS)
Si estás utilizando un sistema basado en Unix, puedes encontrar el PID (identificador de proceso) que está ocupando el puerto y terminarlo mediante la terminal.
- Abre tu terminal y ejecuta el siguiente comando para identificar el proceso que usa el puerto (reemplaza 3000 por tu puerto):
lsof -i :3000 - Busca el número en la columna PID del resultado obtenido.
- Mata el proceso de forma forzada ejecutando:
kill -9 [PID] - Vuelve a iniciar tu aplicación Node.js normalmente.
Método 2: Liberar el puerto en Windows (CMD o PowerShell)
En entornos Windows, el procedimiento requiere el uso del Símbolo del sistema para rastrear la conexión activa.
- Abre la consola como Administrador y busca el PID con el comando:
netstat -ano | findstr :3000 - Identifica el número que aparece al final de la línea correspondiente.
- Detén el proceso ejecutando el siguiente comando:
taskkill /F /PID [PID] - Vuelve a ejecutar tu script de desarrollo en Node.js.
Método 3: Cambiar el puerto en tu aplicación
Si prefieres no detener el otro servicio, puedes configurar tu aplicación de Node.js para que utilice un puerto dinámico o alternativo mediante variables de entorno.
Modifica tu archivo de configuración del servidor con el siguiente fragmento de código:
const PORT = process.env.PORT || 4000;
app.listen(PORT, () => { console.log(`Servidor corriendo en puerto ${PORT}`); });