La pregunta aparece en cada proyecto: ¿Express o NestJS? La respuesta corta es "depende", pero la respuesta larga es más útil. Aquí tienes código, benchmarks y una matriz de decisión.
Filosofía
Express es minimalista. Te da routing y middleware. El resto lo decides tú.
NestJS es opinionated. Te da arquitectura (módulos, controllers, providers), DI, y patrones listos para usar.
// Express 5 — un endpoint
import express from 'express';
const app = express();
app.get('/users/:id', async (req, res) => {
const user = await db.user.findById(req.params.id);
res.json(user);
});
// NestJS 11 — el mismo endpoint
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@Get(':id')
async findOne(@Param('id') id: string) {
return this.usersService.findOne(id);
}
}
Más código en NestJS, sí. Pero fíjate en lo que no ves: el UsersService está inyectado, tipado, y testeable sin mockear nada manualmente.
Benchmarks reales
Node 22, autocannon, 50 conexiones, 10 segundos, JSON response:
| Framework | Req/s | Latency p99 |
|---|---|---|
| Express 5 | 9.200 | 12ms |
| NestJS 11 (Express) | 8.100 | 14ms |
| NestJS 11 (Fastify) | 14.500 | 7ms |
NestJS con Express es ~12% más lento que Express puro. Con Fastify adapter, es más rápido que Express. La diferencia desaparece en apps reales con DB calls.
Cuándo elegir Express
- API pequeña (< 10 endpoints)
- Prototipo rápido que vas a tirar
- Equipo que prefiere configurar todo manualmente
- No necesitas DI, guards, interceptors
Cuándo elegir NestJS
- API con > 10 endpoints
- Necesitas DI (testing, swappable implementations)
- Auth complejo (guards, RBAC, multi-tenant)
- Webhooks, colas, cron jobs, event-driven
- Equipo > 1 dev (la arquitectura estándar reduce fricción)
- Microservicios (NestJS tiene transporters para TCP, Redis, NATS, gRPC)
Matriz de decisión
| Criterio | Express | NestJS |
|---|---|---|
| Setup inicial | 5 min | 15 min |
| Curva de aprendizaje | Baja | Media |
| Boilerplate | Tú lo escribes | Lo genera CLI |
| Testing | Manual | Integrado |
| DI | Manual o lib externa | Nativo |
| Microservicios | DIY | Built-in |
| Performance | Base | +Fastify = mejor |
| Escalabilidad de equipo | Baja | Alta |
El coste de equivocarse
Empezar con Express y migrar a NestJS cuando tienes 50 endpoints y 3 devs cuesta 2-3 sprints. Empezar con NestJS para una API de 3 endpoints cuesta 15 minutos más de setup.
El error caro es el primero. Si dudas, empieza con NestJS. El overhead inicial es mínimo y el coste de migración es cero.
En SOM-OS usamos NestJS en todos los backends. Construimos sistemas operativos de negocio con IA en Mallorca — si necesitas un sistema, hablemos.
¿Usas Express o NestJS? ¿Por qué? Cuéntamelo en los comentarios.
Top comments (0)