Volver al archivo
NestJS18 ABR, 20261 min lectura

Guards vs Middleware en NestJS

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 comentarios
JG
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.