如何访问:compojure 函数中的标题
Posted
技术标签:
【中文标题】如何访问:compojure 函数中的标题【英文标题】:how to you access :headers inside compojure function 【发布时间】:2013-05-18 08:35:50 【问题描述】:org.clojure/clojure-contrib "1.2.0" 环“1.1.8” 合成“1.1.5” 影响力“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-headers 传递给“txn-add”处理程序。我做了很多谷歌并查看了代码,但找不到任何有用的东西。
我知道,我可以使用以下内容来传递标头(但它不会解析 url 请求),
(POST "/api/v1"
headers :headers (txn-add "dummy stor" "dummy txn" headers))
另外,如何将 POST 请求的内容(即:body)传递给“txn-add”?
【问题讨论】:
如果您找到了解决方案,请务必将答案标记为正确。 【参考方案1】:如果 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
【讨论】:
我对整个 clojure 有点陌生(刚开始两周)。因此,不确定我是否理解您的回答。但是,我需要解析 [stor txn 文件] 的“url”部分,然后还需要在(POST ["/api/v1/:stor/:txn/data/:file" :file #".*"] [stor txn file] (txn-add stor txn file))
中传递 :headers。所以,我需要结合向量参数和解构绑定形式,如何实现【参考方案2】:
整个请求映射可以在绑定中使用 :as
关键字在绑定中指定,然后用于读取标头或正文:
(POST ["/api/v1/:stor/:txn/data/:file" :file #".*"]
[stor txn file :as req]
(my-handler stor txn file req))
【讨论】:
谢谢。它起到了神奇的作用(但它对我来说仍然是一个黑魔法,因为我无法通过盯着 github 上的 compojure 代码来解决这个问题)。现在,我可以将所有参数(url 组件和标题)传递给处理程序。 查看github.com/weavejester/compojure/blob/master/src/compojure/… 了解如何处理绑定 感谢 Ankur。看看“向量绑定”的实现,我现在很清楚它是如何工作的。以上是关于如何访问:compojure 函数中的标题的主要内容,如果未能解决你的问题,请参考以下文章
compojure-api 中的 body 和 body-params 有啥区别?