Глобальный кеш Nestjs: проблема CacheInterceptor - PullRequest
0 голосов
/ 17 октября 2019

После того, как глобально настроенный кеш, например, docs , CacheInterceptor выдает ошибку, если я использую его вне app.module.

app.module.ts

const cacheConfig = {
  store: redisStore,
  host: 'localhost',
  port: 6379
}

@Module({
  imports: [
    CacheModule.register(cacheConfig),
    CustomerModule,
  ],
  providers: [
    {
      provide: APP_INTERCEPTOR,
      useClass: CacheInterceptor
    }
  ]
})
export class AppModule {}

customer.module.ts

@Module({
  imports: [TypeOrmModule.forFeature([CustomerRepository]), TypeOrmModule.forFeature([User])],
  controllers: [CustomerController]
})
export class CustomerModule {}

customer.controller.ts

@Controller('customer')
export class CustomerController {
  constructor(
    @InjectRepository(CustomerRepository) private customerRepository: CustomerRepository,
    @InjectRepository(User) private userRepository: Repository<User>
  ) {}

  @Get()
  @UseInterceptors(CacheInterceptor)
  async get(): Promise<any> {
    const user = await this.userRepository.findOne({ where: { id: 1 }, relations: ['customer'] })
    console.log(user.customer.name)
    const customer = await this.customerRepository.findOne({ where: { id: 1 }, select: ['id', 'name'] })
    return { customer: customer.name, email: user.email }
  }
}

Я хотел бы использовать CacheInterceptor для всех модулей без импорта каждого CacheModule.

Nest не может разрешить зависимости APP_INTERCEPTOR (UUID: 6aa42c77-1bac-4098-b217-1b01eb268240) (?, Отражатель). Убедитесь, что аргумент с индексом [0] доступен в контексте CustomerModule.

1 Ответ

0 голосов
/ 17 октября 2019

Если у вас есть { provide: APP_INTERCEPTOR, useClass: CacheInterceptor }, вам не нужно добавлять в @UseInterceptors() декоратор в вашем controller. У вас должен быть CahceInterceptor, работающий по умолчанию с остальными настройками

...