我已经了解到幂等请求必须返回相同的响应,因为相同的请求发送。但不太确定如何在Nestjs体系结构中实现这一点?如果已经创建了资源并识别了重复请求,则应返回此资源。我怀疑逻辑一定是在服务水平..。
我尝试过使用拦截器,但据我所知,它们只能处理请求。我的意思是,我不能做“嘿,我知道这个请求,所以返回这个存储的数据,不要处理它两次”。
不过,好吧,这是middlewares。我可以在主处理请求之前发送响应。但在这种情况下,我不能缓存/存储请求的响应.仅仅因为有了middlewares,我就无法访问响应对象。
有什么想法吗?
发布于 2022-01-27 15:45:57
通过定义幂等HTTP方法(请求的结果是
HTTP方法是幂等的,如果一个相同的请求可以在一行中发出一次或几次,并且效果相同,同时使服务器处于相同的状态。
因此,缓存并不是使方法处理程序幂等的原因,而是它所做的操作。
如果您想缓存请求的结果,可以使用nestjs built CacheInterceptor。在全局、每个控制器甚至每个方法处理程序(与每个拦截器相同)中使用它。
首先将缓存模块导入到所需的模块(或根模块并使其为全局的) CacheModule.register({ isGlobal: true, }),然后使用@UseInterceptor(CacheInterceptor)修饰控制器/方法处理程序。
全局使用拦截器可以通过几种方式完成,但直接执行的是简单的app.useGlobalInterceptors(new CacheInterceptor())。
注意:它只在开箱即用的情况下缓存GET请求,因此如果需要其他请求,可以扩展它以添加逻辑。
https://stackoverflow.com/questions/70855591
复制相似问题