Clojure Compojure:嵌套路由问题

Clojure Compojure:嵌套路由问题,clojure,compojure,Clojure,Compojure,我正在尝试在应用程序中设置路由,以便: /:locale/->Home,带有区域设置绑定 /:区域设置/搜索->搜索, 使用区域设置绑定 到目前为止,我的路由代码是: (defn controller-routes [locale] (home/c-routes locale) (search/c-routes locale))) (defroutes app-routes (route/resources "/") (context "/:locale" [locale

我正在尝试在应用程序中设置路由,以便:

  • /:locale/->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)))
(def c-routes (GET "/search" [locale] (index locale)))
(def c-routes (GET "/" [locale] (index locale)))
主/主航线:

(defn c-routes [locale]
 (GET "/search" [] (index locale)))
(defn c-routes [locale]
   (GET "/" [] (index locale)))
(def c-routes (GET "/search" [locale] (index locale)))
(def c-routes (GET "/" [locale] (index locale)))
我不明白为什么这不能正常工作,但目前“/uk/search/”匹配正确,但“/uk/”给出了404页面


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

控制器路由
是一个正常的功能,它现在返回最后一条路由,即搜索,因此仅搜索有效。您需要的是使用
defroutes
controller routes
设置为一条路由,并更改c-路由:

搜索/c-路线:

(defn c-routes [locale]
 (GET "/search" [] (index locale)))
(defn c-routes [locale]
   (GET "/" [] (index locale)))
(def c-routes (GET "/search" [locale] (index locale)))
(def c-routes (GET "/" [locale] (index locale)))
主/主航线:

(defn c-routes [locale]
 (GET "/search" [] (index locale)))
(defn c-routes [locale]
   (GET "/" [] (index locale)))
(def c-routes (GET "/search" [locale] (index locale)))
(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"))

控制器路由
是一个正常的函数,它现在返回最后一条路由,即搜索,因此只有搜索起作用。您需要的是使用
defroutes
controller routes
设置为一条路由,并更改c-路由:

搜索/c-路线:

(defn c-routes [locale]
 (GET "/search" [] (index locale)))
(defn c-routes [locale]
   (GET "/" [] (index locale)))
(def c-routes (GET "/search" [locale] (index locale)))
(def c-routes (GET "/" [locale] (index locale)))
主/主航线:

(defn c-routes [locale]
 (GET "/search" [] (index locale)))
(defn c-routes [locale]
   (GET "/" [] (index locale)))
(def c-routes (GET "/search" [locale] (index locale)))
(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"))

很有魅力-谢谢。两个c-routes都应该是defroutes,对吗?
defroutes
是在一个处理程序中组成多个路由,即其中一个处理程序将成功,c-routes是使用
GET
定义的单独处理程序,但是,当您编写它们时,您将使用
defroutes
,就像在控制器路由的情况下所做的那样,我看到了。但是如果我想在我的c路线中有多条路线呢?我可以用一个列表来包装它们吗?然后你需要像使用符咒一样使用defrouteworks-谢谢。两个c-routes都应该是defroutes,对吗?
defroutes
是在一个处理程序中组成多个路由,即其中一个处理程序将成功,c-routes是使用
GET
定义的单独处理程序,但是,当您编写它们时,您将使用
defroutes
,就像在控制器路由的情况下所做的那样,我看到了。但是如果我想在我的c路线中有多条路线呢?我可以用一个列表来包装它们吗?然后你需要使用defroutes