2013-03-17 6 views
1

Я пытаюсь настроить маршруты в моем приложении, что:Compojure: Вложенный вопрос маршрута

  • /: национальная_версия/-> Home, с локалью связывания
  • /: локали/поиска -> Поиска , с локаль связывания

до сих пор мой код маршрутизации:

(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))) 

дом/с-маршруты:

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

Я не могу понять, почему это не работает должным образом, но в настоящее время "/ ик/поиск /" соответствует правильно, но «/ ик/"дает страницу 404.

Любая помощь будет оценена по достоинству. Благодарю.

ответ

4

controller-routes - это нормальная функция, которая на данный момент возвращает последний маршрут i.e и, следовательно, работает только поиск. Что вам нужно сделать controller-routes маршрут с помощью defroutes и изменения C-маршрутов, а также:

поиск/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-маршрута должны быть развороты, правда? –

+0

'defroutes' состоит в том, чтобы составить несколько маршрутов в одном обработчике, то есть любой из обработчиков будет успешным, c-маршруты будут индивидуальными обработчиками, поэтому определены с помощью' GET', но когда вы их составляете, вы используете 'defroutes', как это сделано в случай диспетчерских маршрутов – Ankur

+0

Я вижу. Но что, если бы я хотел иметь несколько маршрутов на одном из моих c-маршрутов? Могу ли я просто обернуть их списком? –

Смежные вопросы