Caching 在NestJS中缓存axios httpService

Caching 在NestJS中缓存axios httpService,caching,axios,nestjs,Caching,Axios,Nestjs,在我们的应用程序中,我们使用Axios HttpService向第三方api发出一些请求。 由于bij de api返回的数据量非常大,我们希望缓存响应。 在文档中,我们找不到一些如何执行此操作的示例。 我目前的做法如下: @Module({ imports: [ HttpModule, CacheModule.register({ ttl: 15, store: redisStore, host: 'localhost', p

在我们的应用程序中,我们使用Axios HttpService向第三方api发出一些请求。 由于bij de api返回的数据量非常大,我们希望缓存响应。 在文档中,我们找不到一些如何执行此操作的示例。 我目前的做法如下:

@Module({
  imports: [
    HttpModule,
    CacheModule.register({
      ttl: 15,
      store: redisStore,
      host: 'localhost',
      port: 6379,
    })
  ]
})
export class AppModule {}
我全局注册CacheModule。 然后将其导入到我需要的模块中

在使用第三方api的服务中,我创建了一个拦截器,用于缓存响应。非常粗糙,只是为了测试

constructor(private readonly httpService: HttpService,
              private readonly cache: CacheStore) {
    httpService.axiosRef.interceptors.response.use((response) => {
      cache.set(response.request.url, response.data);
      return response;
    }, error => Promise.reject(error));
  }
首先,这不会运行,因为出于某种原因,无法将缓存管理器导入到CacheModule中。 其次,这是一种创建此类拦截器的Node.js方式,而不是NestJS方式。 但这是一种前进的方式还是有一种更有效的方式?如果是,那是什么方式

在这里不是合适的工具,因为它意味着缓存输入的请求(您的服务接收到的请求,因此它不会再次处理它们并发送回缓存结果)

您试图做的是缓存发出的请求(您的服务向第三方服务发出的请求)。出于神秘的原因,我在NestJS文档中也找不到它的文档,但下面是您的方法:


在使用Axios时,可以使用npm包实现缓存

npm install --save axios-cache-adapter
然后您需要创建一个适配器(最好是在服务的构造函数中,请参见下面的注释):

并将此适配器作为AxiosRequestConfig的一部分与您的请求一起提供:

const config = {
  adapter: this.cache.adapter,
};
this.httpService.get( url, config );
你现在应该很擅长缓存了

重要注意事项:

  • 缓存应该被使用,并且可能只在GET请求上起作用
  • 仅使用setupCache函数一次(例如在服务的构造函数中);如果您为每个请求创建一个缓存对象,那么该缓存每次都将为空,这将破坏它的用途
    • 在这里不是合适的工具,因为它意味着缓存输入的请求(您的服务接收的请求,因此它不会再次处理它们并发送回缓存结果)

      您试图做的是缓存发出的请求(您的服务向第三方服务发出的请求)。出于神秘的原因,我在NestJS文档中也找不到它的文档,但下面是您的方法:


      在使用Axios时,可以使用npm包实现缓存

      npm install --save axios-cache-adapter
      
      然后您需要创建一个适配器(最好是在服务的构造函数中,请参见下面的注释):

      并将此适配器作为AxiosRequestConfig的一部分与您的请求一起提供:

      const config = {
        adapter: this.cache.adapter,
      };
      this.httpService.get( url, config );
      
      你现在应该很擅长缓存了

      重要注意事项:

      • 缓存应该被使用,并且可能只在GET请求上起作用
      • 仅使用setupCache函数一次(例如在服务的构造函数中);如果您为每个请求创建一个缓存对象,那么该缓存每次都将为空,这将破坏它的用途