Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

211
Vistas
Inyectar servicio en la guardia de NestJS

Usamos ThrottlerGuard en nuestra aplicación NestJS del paquete @nestjs/throttler para limitar las conexiones y se implementa así:

 @Injectable() export class RateLimiter extends ThrottlerGuard { RATE_LIMIT_EXCEEDED = 'Rate limit exceeded.'; async handleRequest(context: ExecutionContext, limit: number, ttl: number) { const wsData = context.switchToWs().getData(); const metadata: MetadataObject = wsData.internalRepr; const clientTokenMetadata = metadata.get(TOKEN_NAME) as MetadataValue[]; const clientToken = clientTokenMetadata[0].toString(); const tokensArray = await this.storageService.getRecord(clientToken); if (tokensArray.length >= limit) { throw new RpcException({ code: Status.UNAVAILABLE, message: this.RATE_LIMIT_EXCEEDED, }); } await this.storageService.addRecord(clientToken, ttl); return true; } }

Ahora, necesito inyectar otro servicio, digamos ConfigService con el uso del constructor, pero debido a que es una clase extendida, necesito llamar a super(); que requería tres argumentos originales más heredados de ThrottlerGuard, pero no se exportan del paquete. ¿Hay alguna otra forma de hacer que funcione además del método con DI en el constructor?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Lo que puede hacer, en lugar de extender ThrottleGuard , es inyectarlo en su constructor y llamar a canActivate() en handleRequest() . Benefíciese cuando no se extienda

No he probado esto, pero puedes probar lo siguiente:

 import {ExecutionContext, Injectable} from "@nestjs/common"; import {ConfigService} from "@nestjs/config"; import {InjectThrottlerStorage, ThrottlerGuard, ThrottlerStorage} from '@nestjs/throttler' @Injectable() export class RateLimiter { constructor( private throttle: ThrottlerGuard, private configService: ConfigService, @InjectThrottlerStorage() private storage: ThrottlerStorage) { } async handleRequest(context: ExecutionContext, limit: number, ttl: number) { // TODO something with ConfigService return this.throttle.canActivate(context); } }

Código fuente de Throttle Guard

about 4 years ago · Juan Pablo Isaza Denunciar

0

lea los documentos: Inyección basada en propiedades

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda