3

我习惯于像这样从容地定义我的路线:

(GET "/home" [req] (home-page req))

然后我可以在我的处理程序中使用整个请求对象。

但现在我想使用带有绑定的路由,例如:

(GET "/details/:id" [id] (details-page id))

在这种情况下,我似乎无法同时获取请求和绑定的参数。我试过了:

(GET "/details/:id" [id req] (details-page id req))

但 req 为零。

有什么方法可以通过绑定获取路由请求?

我想要绑定,所以我不必做类似的事情:

(GET "/details" [req] (details-page req))然后有<a href="/details?id=123">...

我需要请求才能访问会话和请求标头。

有什么建议吗?

提前致谢。

4

3 回答 3

4

Compojure 的绑定向量解构针对参数进行了优化,并且不是很灵活,但幸运的是,您可以对更棘手的情况使用基于正常映射的请求解构:

(GET "/details/:id" {:keys [id] :params :as req} (details-page id req))

应该管用。

于 2015-05-11T17:40:28.530 回答
1

嗯......它并不完美,但我会选择:

(GET "/details/:id" req (details-page (-> req :params :id) req))

这个片段有效,并解决了我的问题,但我喜欢更简单的东西(DRY)。

于 2015-05-12T01:13:58.423 回答
1

根据https://github.com/weavejester/compojure/wiki/Destructuring-Syntax,您应该能够通过添加到绑定向量来绑定req到整个请求::as req

(GET "/details/:id" [id :as req] (details-page id req))

于 2015-05-16T17:24:58.900 回答