Solución: ECONNREFUSED — Node.js no puede conectar con la base de datos
La aplicación no puede conectar con PostgreSQL, MySQL u otra base de datos local. Las causas más comunes: el servicio no está corriendo, el puerto es incorrecto o las credenciales están mal.
¿Por qué ocurre?
ECONNREFUSED significa que la conexión fue rechazada activamente — el puerto está cerrado o nadie escucha en él. Puede ser porque la base de datos no está arrancada, escucha en un puerto diferente, o el firewall/Docker está bloqueando la conexión.
Solución paso a paso
Paso 1 — Comprueba que la base de datos está corriendo:
# PostgreSQL
# Windows:
Get-Service postgresql* # PowerShell
# Mac:
brew services list | grep postgresql
# Linux:
sudo systemctl status postgresql# MySQL
sudo systemctl status mysql # Linux
brew services list | grep mysql # Mac
# Si no está corriendo, arráncalo:
sudo systemctl start postgresql # Linux
brew services start postgresql@14 # Mac
Paso 2 — Verifica el puerto y las credenciales:
# Comprueba que algo escucha en el puerto esperado
netstat -ano | findstr :5432 # Windows
lsof -i :5432 # Mac/Linux
# .env — asegúrate de que los valores son correctos
DATABASE_URL="postgresql://usuario:contraseña@localhost:5432/nombre_db"
# Puerto por defecto PostgreSQL: 5432
# Puerto por defecto MySQL: 3306
# Puerto por defecto MongoDB: 27017
Caso — base de datos en Docker:
# Comprueba que el contenedor está corriendo
docker ps# Si el contenedor está parado
docker start nombre-contenedor
# Si necesitas arrancarlo desde cero
docker run -d \
--name mi-postgres \
-e POSTGRES_PASSWORD=secreto \
-e POSTGRES_DB=midb \
-p 5432:5432 \
postgres:16
// En Docker, a veces 'localhost' no funciona — prueba con '0.0.0.0' o '127.0.0.1'
// En docker-compose, usa el nombre del servicio como host:
// DATABASE_URL="postgresql://user:pass@postgres:5432/db"
// ^^^^^^^^ nombre del servicio en compose
Caso — Prisma: esperar a que la DB esté lista:
# Después de arrancar Docker, espera unos segundos antes de conectar
# O usa un health check en docker-compose.yml# Verifica la conexión manualmente:
npx prisma db pull
Cómo evitarlo en el futuro
En proyectos con Docker, usa docker-compose con healthchecks para que la app no arranque hasta que la DB esté lista. Documenta los pasos de setup en el README para que cualquier miembro del equipo pueda arrancar el entorno.
¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:
Generador de Prompts