当路由绑定时,compojure 获取请求
compojure get request when route has binds
我习惯像这样平静地定义我的路线:
(GET "/home" [req] (home-page req))
然后我可以在我的处理程序中使用整个请求 object。
但现在我想使用带绑定的路由,例如:
(GET "/details/:id" [id] (details-page id))
在这种情况下,我似乎无法同时获取请求和绑定参数。我试过了:
(GET "/details/:id" [id req] (details-page id req))
但请求为零。
有什么方法可以通过绑定获取路由请求吗?
我想要绑定,所以我不必做类似的事情:
(GET "/details" [req] (details-page req))
然后有 <a href="/details?id=123">...
我需要请求才能访问 session 并请求 headers.
有什么建议吗?
提前致谢。
Compojure 的绑定矢量解构针对参数进行了优化,不是很灵活,但幸运的是,您可以对更棘手的情况使用基于普通映射的请求解构:
(GET "/details/:id" {:keys [id] :params :as req} (details-page id req))
应该可以。
嗯...它并不完美,但我会选择:
(GET "/details/:id" req (details-page (-> req :params :id) req))
此代码段有效,并解决了我的问题,但我想要更简单的东西(干)。
根据 https://github.com/weavejester/compojure/wiki/Destructuring-Syntax,您应该能够通过将 :as req
添加到绑定向量来将 req
绑定到整个请求:
(GET "/details/:id" [id :as req] (details-page id req))
我习惯像这样平静地定义我的路线:
(GET "/home" [req] (home-page req))
然后我可以在我的处理程序中使用整个请求 object。
但现在我想使用带绑定的路由,例如:
(GET "/details/:id" [id] (details-page id))
在这种情况下,我似乎无法同时获取请求和绑定参数。我试过了:
(GET "/details/:id" [id req] (details-page id req))
但请求为零。
有什么方法可以通过绑定获取路由请求吗?
我想要绑定,所以我不必做类似的事情:
(GET "/details" [req] (details-page req))
然后有 <a href="/details?id=123">...
我需要请求才能访问 session 并请求 headers.
有什么建议吗?
提前致谢。
Compojure 的绑定矢量解构针对参数进行了优化,不是很灵活,但幸运的是,您可以对更棘手的情况使用基于普通映射的请求解构:
(GET "/details/:id" {:keys [id] :params :as req} (details-page id req))
应该可以。
嗯...它并不完美,但我会选择:
(GET "/details/:id" req (details-page (-> req :params :id) req))
此代码段有效,并解决了我的问题,但我想要更简单的东西(干)。
根据 https://github.com/weavejester/compojure/wiki/Destructuring-Syntax,您应该能够通过将 :as req
添加到绑定向量来将 req
绑定到整个请求:
(GET "/details/:id" [id :as req] (details-page id req))