Skip to content

Guards, interceptors y filtros

NestJS ofrece piezas transversales para seguridad, transformacion, logging y manejo de errores.

Guard

ts
@Injectable()
export class JwtAuthGuard implements CanActivate {
  canActivate(context: ExecutionContext): boolean {
    const request = context.switchToHttp().getRequest()
    return Boolean(request.user)
  }
}

Uso:

ts
@UseGuards(JwtAuthGuard)
@Get('me')
me() {}

Interceptor

ts
@Injectable()
export class LoggingInterceptor implements NestInterceptor {
  intercept(context: ExecutionContext, next: CallHandler) {
    const now = Date.now()
    return next.handle().pipe(tap(() => console.log(Date.now() - now)))
  }
}

Exception filter

ts
@Catch(DomainError)
export class DomainErrorFilter implements ExceptionFilter {
  catch(exception: DomainError, host: ArgumentsHost) {
    const response = host.switchToHttp().getResponse()
    response.status(400).json({ code: exception.code, message: exception.message })
  }
}

Buenas practicas

  • Guards para autorizacion.
  • Interceptors para logging/transformacion.
  • Filters para errores consistentes.
  • No meter negocio complejo en interceptors.
  • Registrar globales con criterio.