Guards vs Middleware en NestJS
La confusión entre Guards y Middleware es común. La regla práctica: Middleware muta o enriquece el request; Guards deciden si el request puede continuar.
Middleware
Ideal para logging, parsing de tenant, CORS custom o inyectar headers derivados.
typescript@Injectable() export class TenantMiddleware implements NestMiddleware { use(req: Request, _res: Response, next: NextFunction) { req.headers['x-tenant-id'] = resolveTenant(req); next(); } }
Guards
Ideal para autenticación y autorización basada en roles o permisos.
typescript@Injectable() export class RolesGuard implements CanActivate { canActivate(context: ExecutionContext): boolean { const roles = this.reflector.get<string[]>('roles', context.getHandler()); const user = context.switchToHttp().getRequest().user; return roles.some((role) => user.roles?.includes(role)); } }
No mezcles lógica de auth en middleware si podés expresarla como Guard con metadata declarativa.
¿Te sirvió este post?
Discusión
2 comentariosJG
Juana GómezHace 2 horas
Excelente desglose. La explicación del Request scope me vino al pelo.
¿Te gustó el artículo?
Suscribite para recibir las últimas publicaciones directo en tu email.