Clojure China

stream如何读取两次?

#1

读取两次stream,第二次读取结果为空。查阅资料需要重置stream读取的位置,有人遇到类似问题?

下面是简单的演示代码:

(let [request (mock/request :post "foo" "body")]
  (println 1 (slurp (:body request)))
  (println 2 (slurp (:body request))))

运行结果如下:

1 body
2 
#2
(let [request (mock/request :post "foo" "body")
       body-str (slurp (:body request))]
  (println 1 body-str)
  (println 2 body-str))

IO Web 开发永远的痛

#3

谢谢,演示代码简化了问题,实际上需要在路由与响应两处分别读取stream。

#4
(defn wrap-slurp [h]
  (fn [req]
    (h (assoc req :body-str (slurp (:body req))))))

我猜你需要的是这个