我正在與Noir的Web應用程序工作。但是,我遇到路由問題。下面是我的控制器代碼示例:Clojure Noir路由優先級
(defpage [:get "https://stackoverflow.com/users/add"] []
(common/layout
[:div.row
[:div.span12
[:div.page-header
[:h2 "Add User"]]
(form-to {:class "form-horizontal"} [:post "https://stackoverflow.com/users/add"]
(user-form {:id ""
:first_name ""
:last_name ""
:login ""
:email ""
:admin false
:staff false
:manager false
:customer false})
[:div.control-group
[:div.controls
(submit-button {:class "btn btn-primary"} "Edit")]])]]))
(defpage [:get "https://stackoverflow.com/users/:id" :id #"\d+"] {:keys [id]}
(let [user (user/get-by-id id)]
(common/layout
[:div.row
[:div.span12
[:div.page-header
[:h2 "View User"]]
[:h3 (str (user :first_name) " " (user :last_name))]
[:dl.dl-horizontal
[:dt "login"]
[:dd (user :login)]
[:dt "e-mail"]
[:dd (user :email)]
[:dt "admin"]
[:dd (if (user :admin) [:i.icon-ok ""] [:i.icon-remove ""])]
[:dt "staff"]
[:dd (if (user :staff) [:i.icon-ok ""] [:i.icon-remove ""])]
[:dt "manager"]
[:dd (if (user :manager) [:i.icon-ok ""] [:i.icon-remove ""])]
[:dt "customer"]
[:dd (if (user :customer) [:i.icon-ok ""] [:i.icon-remove ""])]]
[:div.form-actions
[:a.btn.btn-primary {:href (str "https://stackoverflow.com/users/" (user :id) "/edit")} "Edit"] " "
[:a.btn.btn-danger {:href (str "https://stackoverflow.com/users/" (user :id) "/remove")} "Remove"] " "
[:a.btn {:href "/users"} "All users"]]]])))
每次我請求「/用戶/添加」,該請求被路由到「/用戶/:ID」(它是好的,當我刪除/用戶/添加動作)。我有另一個控制器非常類似的代碼,它工作正常。可能是什麼問題?如何設置路由優先級?
感謝, 亞切克
作爲一種擴展,您可以爲它提供Compojure路由設置,雖然它們不像Noir的路由那麼獨立,但它們保持其排序。 – deterb
Davidbe的回答使它成功,但我相信Noir可能存在問題。我的其他控制器中的路由沒有指定正則表達式,但按預期工作。 – Jacek
@Jacek看看目前的實現我不會依賴它。 –