typescript - NestJs'te bazı rotalarda global önbelleği nasıl yoksayabilirsiniz
NestJS uygulamamda global önbelleği APP_INTERCEPTOR ile etkinleştiriyorum. Ancak şimdi, bazı rotalarda bunu yoksaymam gerekiyor. Bunu nasıl yapabilirim?
Cevap #1
Çözümü buldum. Her şeyden önce, CacheInterceptor'i genişleten bir CustomHttpCacheInterceptor yaptım:
@Injectable()
export default class CustomHttpCacheInterceptor extends CacheInterceptor {
httpServer: any;
trackBy(context: ExecutionContext): string | undefined {
const request = context.switchToHttp().getRequest();
const isGetRequest = request.method === 'GET';
const requestURl = request.path;
const excludePaths = ['/my/custom/route'];
if (
!isGetRequest ||
(isGetRequest && excludePaths.some(url => requestURl.includes(url)))
) {
return undefined;
}
return requestURl;
}
}
ve sonra bunu app.module'de küresel bir önbellek kesici olarak ekliyorum
//...
providers: [
AppService,
{
provide: APP_INTERCEPTOR,
useClass: CustomHttpCacheInterceptor,
},
],
//...
Cevap #2
Sadra'nın önerdiğine farklı bir yaklaşım, trackBy() yöntemi yerine CacheInterceptor sınıfında isRequestCacheable() yöntemini geçersiz kılabilirsiniz. Bu biraz daha kolaydır.
@Injectable()
export class CustomCacheInterceptor extends CacheInterceptor {
excludePaths = ["/my/custom/route"];
isRequestCacheable(context: ExecutionContext): boolean {
const req = context.switchToHttp().getRequest();
return (
this.allowedMethods.includes(req.method) &&
!this.excludePaths.includes(req.url)
);
}
}
