如何访问:compojure函数内的标题

Sha*_*ari 8 clojure compojure http-headers

org.clojure/clojure-contrib"1.2.0"ring"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>"))
Run Code Online (Sandbox Code Playgroud)

在第二个POST中,我还想将所有http-header传递给"txn-add"处理程序.我做了很多谷歌并查看代码,但找不到任何有用的东西.

我知道,我可以使用以下方法来传递标题(但是它不会解析网址请求),

(POST "/api/v1"
  {headers :headers} (txn-add "dummy stor" "dummy txn" headers))
Run Code Online (Sandbox Code Playgroud)

另外,如何将POST请求的内容(即:正文)传递给"txn-add"?

Joo*_*aat 10

如果GET,POST等的第二个参数不是向量,那么它是一个解构绑定形式request.这意味着你可以做以下事情:

(GET "/my/path"
   {:keys [headers params body] :as request} 
   (my-fn headers body request))
Run Code Online (Sandbox Code Playgroud)

挑选request你想要的部分.请参阅Ring SPECClojure关于绑定和解构的文档


Ank*_*kur 6

可以使用绑定中的:as关键字在绑定中指定整个请求映射,然后用于读取标题或正文:

(POST ["/api/v1/:stor/:txn/data/:file" :file #".*"] 
      [stor txn file :as req] 
      (my-handler stor txn file req))
Run Code Online (Sandbox Code Playgroud)