org.clojure / clojure-contrib“1.2.0” 戒指“1.1.8” compojure“1.1.5” clout“1.1.0”
(defroutes rest-routes
(GET "/" [] "<p> Hello </p>")
(POST "/api/v1/:stor/sync" [stor] (start-sync stor))
(POST ["/api/v1/:stor/:txn/data/:file" :file #".*"] [stor txn file] (txn-add stor txn file))
(ANY "*" [] "<p>Page not found. </p>"))
在第二个POST中,我还想将所有http-header传递给“txn-add”处理程序。我做了很多谷歌并查看代码,但找不到任何有用的东西。
我知道,我可以使用以下方法传递标题(但是它不会解析网址请求),
(POST "/api/v1"
{headers :headers} (txn-add "dummy stor" "dummy txn" headers))
另外,如何将POST请求的内容(即:正文)传递给“txn-add”?
答案 0 :(得分:8)
如果GET,POST等的第二个参数不是向量,它是request
的解构绑定表单。这意味着您可以执行以下操作:
(GET "/my/path"
{:keys [headers params body] :as request}
(my-fn headers body request))
挑选出你想要的request
部分。请参阅the Ring SPEC和Clojure's docs on binding & destructuring
答案 1 :(得分:6)
可以在绑定中使用:as
关键字在绑定中指定整个请求映射,然后用于读取标题或正文:
(POST ["/api/v1/:stor/:txn/data/:file" :file #".*"]
[stor txn file :as req]
(my-handler stor txn file req))