我了解到,鉴于发送的相同请求,幂等请求必须返回相同的响应。但不太确定如何在 Nestjs 架构中实现这一点?如果资源已经创建并且识别到重复请求,则应返回该资源。我怀疑逻辑一定是在服务层面......
我尝试过使用拦截器,但据我所知它们只能处理请求。我的意思是,我不能做类似“嘿,我知道这个请求,所以返回这个存储的数据并且不要处理它两次”之类的事情。
但是好吧,有
middlewares
。我可以在主要处理请求之前发送响应。但在这种情况下,我无法缓存/存储请求的响应...只是因为使用 middlewares
我无法访问响应对象。
有什么想法吗?
通过 definition 幂等 HTTP 方法(请求的结果是
如果相同的请求可以连续发出一次或多次且具有相同的效果,同时使服务器处于相同的状态,则 HTTP 方法是幂等的。
所以缓存并不完全是使方法处理程序幂等的原因,而是它所执行的操作的原因。
如果你想缓存请求的结果,你可以使用内置的nestjs
CacheInterceptor
。全局使用它,每个控制器甚至每个方法处理程序(与每个拦截器相同)。CacheModule.register({ isGlobal: true, })
,然后用它装饰您的控制器/方法处理程序@UseInterceptor(CacheInterceptor)
。
全局使用拦截器可以通过多种方式完成,但最直接的方法很简单
app.useGlobalInterceptors(new CacheInterceptor())
注意:它仅缓存
GET
开箱即用的请求,因此如果您需要其他请求,可以扩展它以添加您的逻辑
您也可以使用这个包让您的生活更轻松https://www.npmjs.com/package/@node-idempotency/nestjs