如何通过幂等密钥在NestJS中实现幂等



我了解到,如果发送了相同的请求,幂等请求必须返回相同的响应。但不确定如何在Nestjs架构中实现这一点?若已经创建了资源,并且识别出重复的请求,则应返回此资源。我怀疑逻辑一定在服务级别。。。

我试过使用拦截器,但据我所知,它们只能处理请求。我的意思是,我不能做像";嘿,我知道这个请求,所以返回这个存储的数据,不要处理两次"。

但好吧,有middlewares。我可以在主要处理请求之前发送响应。但在这种情况下,我无法缓存/存储请求的响应。。。仅仅因为有了middlewares,我就无法访问响应对象。

有什么想法吗?

根据定义幂等HTTP方法(请求的结果是

如果一个相同的请求可以在一行中发出一次或多次,并且具有相同的效果,同时使服务器处于相同的状态,则HTTP方法是幂等的。

因此缓存并不是使方法处理程序幂等的原因,而是它所做的操作。

如果您想缓存请求的结果,可以使用nestjs构建的CacheInterceptor。全局使用它,每个控制器使用它,甚至每个方法处理程序使用它(与每个拦截器相同(
首先将缓存模块导入到所需的模块(或根模块并使其成为全局模块(CacheModule.register({ isGlobal: true, }),然后用它来装饰控制器/方法处理程序@UseInterceptor(CacheInterceptor)

全局使用拦截器可以通过多种方式实现,但最直接的方法是简单的app.useGlobalInterceptors(new CacheInterceptor())

注意:它只缓存开箱即用的GET请求,所以如果你需要其他请求,你可以扩展它来添加你的逻辑

最新更新