compojure在路由绑定时获取请求

时间:2015-05-11 17:34:42

标签: clojure compojure luminus

我用这样的方式来定义我的路线:

$pathname = 'Users/????/gyb/GYB-GMail-Backup-xxxxx@gmail.com/2015/'.$m .'/'.$d.'/'; echo $pathname; $filename = $pathname.$d.'-81.eml'; $texttofind = "Subject:"; $file = new SplFileObject($filename); $bort = FALSE; $grabbed = FALSE; foreach($file as $line) { if(strpos($line, $texttofind) !== FALSE) { $grabbed = $line; } } echo $grabbed; if(strpos($grabbed, "ref12345") === FALSE) { echo "ref12345 does not exist in this file"; }

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

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

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

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

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

但是请求没有。

有没有办法在带绑定的路由上获取请求?

我想要绑定所以我不必做以下事情:

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

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

任何建议?

提前感谢。

3 个答案:

答案 0 :(得分:4)

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

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

应该工作。

答案 1 :(得分:1)

哼......这不完美,但我要去:

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

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

答案 2 :(得分:1)

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

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