2013-03-17 81 views
1

我试图建立的路线在我的应用使得:的Compojure:嵌套的路线问题

  • /:区域/ - >主页,与现场结合
  • /:区域/搜索 - >搜索, 与区域结合

迄今为止,我的路由的代码是:

(defn controller-routes [locale] 
    (home/c-routes locale) 
    (search/c-routes locale))) 


(defroutes app-routes 
    (route/resources "/") 
    (context "/:locale" [locale] 
    (controller-routes locale)) 
    no-locale-route 
    (route/not-found "Not Found")) 

搜索/ C-路线:

(defn c-routes [locale] 
(GET "/search" [] (index locale))) 

家用/ C-路线:

(defn c-routes [locale] 
    (GET "/" [] (index locale))) 

我不明白为什么这不能正常工作,但目前 “/英国/搜索/” 匹配正确,但“/英国/ “给出了404页面。

任何帮助,将不胜感激。谢谢。

回答

4

controller-routes是一个正常的功能,它现在返回最后的路线,即搜索,因此只有搜索作品。你需要的是使用defroutes和改变C-路线以及使controller-routes路线:

搜索/ C-路线:

(def c-routes (GET "/search" [locale] (index locale))) 

家用/ C-路线:

(def c-routes (GET "/" [locale] (index locale))) 

在哪里你使用以上路线:

(defroutes controller-routes 
    home/c-routes 
    search/c-routes) 


(defroutes app-routes 
    (route/resources "/") 
    (context "/:locale" [locale] 
    controller-routes) 
    no-locale-route 
    (route/not-found "Not Found")) 
+0

工程就像一个魅力 - 谢谢。但是,两条c-route应该是defroutes,但是,对吗? – 2013-03-17 17:26:32

+0

'defroutes'是在单个处理程序中组合多个路线,即任何一个处理程序都会成功,c-routes是使用'GET'定义的单个处理程序,但是当你编写它们时,你可以使用'defroutes'控制器路线案例 – Ankur 2013-03-17 17:30:07

+0

我明白了。但是如果我想在我的一条c-route中有多条路线呢?我可以用一个列表来包装它们吗? – 2013-03-17 17:40:52