2015-05-11 22 views
3

我用它来定义沉着我的路线是这样的:的Compojure GET请求路由具有结合

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

,然后我可以有我的处理程序中使用整个request对象。

,但现在我想用路线与结合,如:

(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">...

,我需要请求访问了会议,并请求头。

有什么建议吗?

在此先感谢。

回答

1

呜呜......它并不完美,但我会用:

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

这个片段的作品,并解决我的问题,但我喜欢简单的东西(DRY)。

4

的Compojure的绑定,矢量拆解为PARAMS优化,不是很灵活,但幸运的是,你可以使用要求的法线贴图为基础的解构为棘手的情况:

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

应该工作。

+1

这不是一个有效的地图解构。你忘了大括号了吗? – Alex