Solución: Cannot GET / — Express no encuentra la ruta
Express responde 'Cannot GET /' porque no tienes definida esa ruta o los archivos estáticos no están configurados. Diagnóstico paso a paso para APIs y apps con frontend.
¿Por qué ocurre?
Express no tiene ninguna ruta registrada para GET / (o la ruta que pediste). También ocurre cuando sirves un frontend compilado pero no has configurado `express.static()`, o cuando el orden de los middlewares es incorrecto y la petición no llega a la ruta.
Solución paso a paso
Caso 1 — API sin ruta raíz definida:
const express = require('express');
const app = express();// ❌ No hay ninguna ruta — todo devuelve "Cannot GET /"
app.listen(3000);
// ✅ Define al menos la ruta raíz
app.get('/', (req, res) => {
res.json({ status: 'ok', mensaje: 'API funcionando' });
});
app.listen(3000, () => console.log('Servidor en http://localhost:3000'));
Caso 2 — Sirviendo un frontend compilado (React, Vue, etc.):
const express = require('express');
const path = require('path');
const app = express();// ✅ Sirve los archivos estáticos del build
app.use(express.static(path.join(__dirname, 'dist')));
// ✅ Para SPAs: cualquier ruta que no sea de la API devuelve index.html
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'dist', 'index.html'));
});
app.listen(3000);
Caso 3 — Ruta con prefijo pero la petición no lo incluye:
// Si registraste las rutas con un prefijo...
app.use('/api', require('./routes/usuarios'));// ...pero accedes a http://localhost:3000/usuarios → "Cannot GET /usuarios"
// ✅ La ruta correcta es: http://localhost:3000/api/usuarios
Caso 4 — El servidor no ha arrancado o escucha en otro puerto:
# Comprueba que el proceso está corriendo
netstat -ano | findstr :3000 # Windows
lsof -i :3000 # Mac/Linux# Y que arrancaste el servidor
node server.js
# o
npm start
Diagnosticar qué rutas tiene Express registradas:
// Añade esto después de definir todas tus rutas
app._router.stack
.filter(r => r.route)
.forEach(r => {
const methods = Object.keys(r.route.methods).join(',').toUpperCase();
console.log(${methods} ${r.route.path});
});
Cómo evitarlo en el futuro
Añade siempre una ruta GET / que confirme que el servidor está vivo. Usa un middleware 404 al final de todas las rutas para dar mensajes de error claros en lugar del genérico de Express.
¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:
Generador de Prompts