Caching 在NestJS中缓存axios httpService
在我们的应用程序中,我们使用Axios HttpService向第三方api发出一些请求。 由于bij de api返回的数据量非常大,我们希望缓存响应。 在文档中,我们找不到一些如何执行此操作的示例。 我目前的做法如下: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
@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函数一次(例如在服务的构造函数中);如果您为每个请求创建一个缓存对象,那么该缓存每次都将为空,这将破坏它的用途
- 缓存应该被使用,并且可能只在GET请求上起作用
- 仅使用setupCache函数一次(例如在服务的构造函数中);如果您为每个请求创建一个缓存对象,那么该缓存每次都将为空,这将破坏它的用途
- 在这里不是合适的工具,因为它意味着缓存输入的请求(您的服务接收的请求,因此它不会再次处理它们并发送回缓存结果)
您试图做的是缓存发出的请求(您的服务向第三方服务发出的请求)。出于神秘的原因,我在NestJS文档中也找不到它的文档,但下面是您的方法:
在使用Axios时,可以使用npm包实现缓存
npm install --save axios-cache-adapter
然后您需要创建一个适配器(最好是在服务的构造函数中,请参见下面的注释):
并将此适配器作为AxiosRequestConfig的一部分与您的请求一起提供:
const config = {
adapter: this.cache.adapter,
};
this.httpService.get( url, config );
你现在应该很擅长缓存了
重要注意事项: