Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

243
Visualizações
NestJS: aumente el tiempo de espera de respuesta para un punto final http particular

Recién comencé a aprender sobre NestJS y me pregunto cómo podría manipular el tiempo de espera de respuesta para puntos finales particulares.

Podría hacerlo a nivel de servidor como:

 const server = await app.listen(...); server.setTimeout(1800000)

o en el punto final, que se ve mal:

 @Post('/test') public async import(...props, @Res() res: Response): Promise<string> { res.setTimeout(1800000) }

Pero, ¿cómo podría hacer eso a nivel de controlador o método? He intentado aumentar el tiempo de espera en el punto final usando interceptores como:

 import { Injectable, NestInterceptor, ExecutionContext, CallHandler, RequestTimeoutException } from '@nestjs/common'; import { Observable, throwError, TimeoutError } from 'rxjs'; import { catchError, take, timeout } from 'rxjs/operators'; @Injectable() export class TimeoutInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler): Observable<any> { return next.handle().pipe( timeout(1800000), catchError(err => { if (err instanceof TimeoutError) { return throwError(() => new RequestTimeoutException()); } return throwError(() => err); }), ); }; };

Y aplicarlo en el punto final como:

 @Post('/test') @UseInterceptors(TimeoutInterceptor) public async import(...props, @Res() res: Response): Promise<string> { long running code... }

Aunque el interceptor se activa, puedo registrar algo, el tiempo de espera no parece funcionar en absoluto:/

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Bien, si alguien tiene curiosidad, esto es lo que he hecho:

 import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common'; import { Observable } from 'rxjs'; @Injectable() export class TimeoutInterceptor implements NestInterceptor { intercept(context: ExecutionContext, next: CallHandler): Observable<any> { const response = context.switchToHttp().getResponse(); response.setTimeout(600000) return next.handle(); }; };
about 4 years ago · Juan Pablo Isaza Relatório

0

import { Injectable, NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common'; import { Observable } from 'rxjs'; @Injectable() export class TimeoutInterceptor implements NestInterceptor { constructor( private readonly reflector: Reflector, ) {} intercept(context: ExecutionContext, next: CallHandler): Observable<any> { const response = context.switchToHttp().getResponse(); const timeout = this.reflector.get<number>('request-timeout', context.getHandler()) || 60000; response.setTimeout(timeout ) return next.handle(); }; };
 import { applyDecorators, SetMetadata, UseInterceptors } from '@nestjs/common'; const SetTimeout = (timeout: number) => SetMetadata('request-timeout', timeout); export function SetRequestTimeout(timeout: number = 600000) { return applyDecorators( SetTimeout(timeout), UseInterceptors(TimeoutInterceptor), ); }

Es posible que tenga que jugar un poco con los proveedores (agregarle el interceptor) Pero ahora solo puede usar @SetRequestTimeout() o @SetRequestTimeout(10000) por conveniencia.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda