Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

235
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!