2013-03-17 56 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