2012-02-24 80 views

回答

4

首先,你可以使id的URI的一部分,这似乎不错,安谧,将允许您使用路由语法强加的条件:

(GET ["/books/:id" :id #"[0-9]+"] [] ...) 

如果你更喜欢使用参数,像

(if-not id 
    (ring.util.response/not-found body-for-404) 
    ...) 

应该在未来的版本环工作,虽然这个特别的功能尚未发布(这只是返回{:status 404 :headers {} :body the-body}虽然)。

此外,

(when id 
    ...) 

将导致路线匹配失败的等效和剩余路由将被尝试;那么你可以使用

(compojure.route/not-found body-for-404) 

作为总是匹配的最终路线。

最后,如果你想申请过滤一大群的Compojure处理的,您不妨将它们合并成的Compojure的defroutesroutes单处理器(后者是一个函数),并在中间件的包装他们:

(defn wrap-404 [handler] 
    (fn wrap-404 [request] 
    (when (-> request :params :id) 
     (handler request)))) 

然后,您可以包括包裹处理程序,routes/defroutes形式的条目。

+0

有没有办法自动做到这一点(例如,与组成宏的参数)?讨厌为所有路线做。 – 2012-02-24 09:06:25

+0

我已经编辑了一些干的东西了。我自己会使用基于URI的方法。对Compojure的DSL中params地图的实际内容施加条件没有神奇的语法。 – 2012-02-24 09:49:22

相关问题