Solución: EADDRINUSE — el puerto 3000 ya está en uso en Node.js
Node.js no puede arrancar porque el puerto ya está ocupado por otro proceso. Cómo encontrar y matar el proceso en Windows, Mac y Linux, y cómo evitarlo.
¿Por qué ocurre?
El puerto que intenta usar tu servidor (3000, 4000, 8080...) ya está siendo usado por otro proceso. Pasa cuando cierras el servidor con Ctrl+C pero el proceso no muere del todo, cuando tienes dos terminales corriendo el mismo proyecto, o cuando otra aplicación ocupa ese puerto.
Solución paso a paso
En Windows — encontrar y matar el proceso:
# Ver qué proceso usa el puerto 3000
netstat -ano | findstr :3000# Verás algo como:
# TCP 0.0.0.0:3000 0.0.0.0:0 LISTENING 12345
# El último número (12345) es el PID
# Matar el proceso por PID
taskkill /PID 12345 /F
En Mac/Linux:
# Ver el proceso que ocupa el puerto
lsof -i :3000# O con fuser
fuser 3000/tcp
# Matar el proceso directamente
kill -9 $(lsof -ti:3000)
Solución rápida — cambiar de puerto en tu app:
// En lugar de forzar el puerto 3000, usa otro o lee de variable de entorno
const PORT = process.env.PORT || 3001;
app.listen(PORT, () => console.log(Servidor en puerto ${PORT}));
En Next.js — arrancar en otro puerto:
npx next dev -p 3001
En Vite:
npx vite --port 3001
Cómo evitarlo en el futuro
Usa siempre `process.env.PORT` para configurar el puerto, nunca lo hardcodees. Añade un handler de señal para cerrar el servidor limpiamente: `process.on('SIGTERM', () => server.close())`.
¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:
Generador de Prompts