Как игнорировать перехватчик для определенного маршрута в NestJS - PullRequest
0 голосов
/ 01 февраля 2019

Я установил перехватчик уровня контроллера @UseInterceptors(CacheInterceptor).Теперь я хочу, чтобы один из маршрутов контроллера игнорировал этот перехватчик, есть ли способ добиться этого в nest.js?

Для этого конкретного случая я хочу иметь возможность отключить CacheInterceptor для одного из маршрутов.

@Controller()
@UseInterceptors(CacheInterceptor)
export class AppController {
  @Get('route1')
  route1() {
    return ...;
  }

  @Get('route2')
  route2() {
    return ...;
  }
  @Get('route3')
  route3() {
    return ...;
  }
  @Get('route4')
  route4() {
    return ...; // do not want to cache this route
  }
}

1 Ответ

0 голосов
/ 01 февраля 2019

Согласно этой проблеме , не имеет дополнительного декоратора исключений , но вместо этого вы можете просто расширить CacheInterceptor и указать исключенные маршруты.

@Injectable()
class HttpCacheInterceptor extends CacheInterceptor {
  trackBy(context: ExecutionContext): string | undefined {
    const request = context.switchToHttp().getRequest();
    const isGetRequest = this.httpServer.getRequestMethod(request) === 'GET';
    const excludePaths = ['path1', 'path2'];
          ^^^^^^^^^^^^
    if (
      !isGetRequest ||
      (isGetRequest && excludePaths.includes(this.httpServer.getRequestUrl))
    ) {
      return undefined;
    }
    return this.httpServer.getRequestUrl(request);
  }
}
...