gpt4 book ai didi

clojure - 已读取时读取 Ring 请求正文

转载 作者:行者123 更新时间:2023-12-03 00:40:22 26 4
gpt4 key购买 nike

我的问题是,如果已经读取了 Ring 请求的正文,我该如何惯用地读取它?

这是背景。我正在为 Ring 应用程序编写一个错误处理程序。当发生错误时,我想记录错误,包括重现和修复错误可能需要的所有相关信息。请求正文是一项重要信息。但是,:body 值的有状态性(因为它是 java.io.InputStream 对象的类型)会导致问题。

具体来说,发生的情况是某些中间件(在我的例子中是 ring.middleware.json/wrap-json-body 中间件)在 body 上执行 slurp InputStream 对象,它更改对象的内部状态,以便将来对 slurp 的调用返回空字符串。因此,主体的[内容]实际上从请求映射中丢失了。

我能想到的唯一解决方案是在读取正文之前抢先复制正文 InputStream 对象,以防万一我以后可能需要它。我不喜欢这种方法,因为对每个请求都做一些工作似乎很笨拙,以防以后可能出现错误。有更好的方法吗?

最佳答案

我有一个库,它吸收了主体,用具有相同内容的流替换它,并存储原始内容,以便稍后可以将其缩小。

groundhog

这对于无限期打开的流来说是不够的,并且如果主体是某些大对象的上传,则这是一个坏主意。但作为调试过程的一部分,它有助于测试和重新创建错误条件。

如果您需要的只是流的副本,则可以使用 tee-stream土拨鼠的功能作为您自己的中间件的基础。

关于clojure - 已读取时读取 Ring 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20553899/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com