当路由绑定时,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))