Saltar al contenido principal
Node.js

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.

Error: Cannot GET /

¿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.

Node.jsExpressHTTPErrorservidor

¿Quieres que una IA te ayude? Genera el prompt perfecto para tu error:

Generador de Prompts

¿Necesitas desarrollo a medida?

Apps web, IA, módulos ERP — cuéntame tu proyecto.