2015-05-02 1 views
1

Я создаю службу игрушки Пьедестала предназначенную иметь следующие ресурсы:Как настроить маршруты пьедестала для сестер, чтобы все были доступны при использовании: ограничений?

  • /
  • /movies
  • /movies/today
  • /movies/:iso-date где :iso-date матчи #### - ####

Ограничение для последнего маршрута определяется следующим фрагментом:

^:constraints {:iso-date #"\d{4}-\d{2}-\d{2}"} 

Всякий раз, когда маршрут, содержащий это ограничение присутствует в таблице маршрутов я не могу получить свой родственный маршрут /movies/today; вместо этого вместо этого получаю ответ «Не найден». Однако при удалении маршрута, связанного с ограничением, GET /movies/today преуспевает.

постамента маршруты я определил, используя лаконичный внешний вид формата, как так:

(defroutes routes 
    [[["/" {:get root-page} 
    ["/movies" ^:interceptors [fetch-movies] 
     {:get movies-page} 
     ["/today" {:get movies-for-today-page}] 
     ["/:iso-date" ^:constraints {:iso-date #"\d{4}-\d{2}-\d{2}"} 
     {:get movies-for-date-page}]]]]]) 

Построил я эту таблицу маршрутов правильно для достижения поведения маршрутизации, что я хочу?

NB: Печать скомпилированные маршрутов дает мне результат, я бы ожидать, что все маршруты присутствуют генерируемый :path-re регулярные выражения матч, как ожидается, в REPL:

({:path-parts [""], 
    :path-params [], 
    :interceptors 
    [{:name :foobar.service/root-page, 
    :enter 
    #object[io.pedestal.interceptor.helpers$before$fn__7359 0x14501070 "[email protected]"], 
    :leave nil, 
    :error nil}], 
    :path "/", 
    :method :get, 
    :path-re #"/\Q\E", 
    :route-name :foobar.service/root-page} 
{:path-parts ["" "movies"], 
    :path-params [], 
    :interceptors 
    [{:name :foobar.service/fetch-movies, 
    :enter 
    #object[io.pedestal.interceptor.helpers$on_request$fn__7401 0x2aa85cc4 "[email protected]"], 
    :leave nil, 
    :error nil} 
    {:name :foobar.service/movies-page, 
    :enter 
    #object[io.pedestal.interceptor.helpers$before$fn__7359 0x30ffc3c0 "[email protected]"], 
    :leave nil, 
    :error nil}], 
    :path "/movies", 
    :method :get, 
    :path-re #"/\Qmovies\E", 
    :route-name :foobar.service/movies-page} 
{:path-parts ["" "movies" "today"], 
    :path-params [], 
    :interceptors 
    [{:name :foobar.service/fetch-movies, 
    :enter 
    #object[io.pedestal.interceptor.helpers$on_request$fn__7401 0x2aa85cc4 "[email protected]"], 
    :leave nil, 
    :error nil} 
    {:name :foobar.service/movies-for-today-page, 
    :enter 
    #object[io.pedestal.interceptor.helpers$before$fn__7359 0x3726fc3b "[email protected]"], 
    :leave nil, 
    :error nil}], 
    :path "/movies/today", 
    :method :get, 
    :path-re #"/\Qmovies\E/\Qtoday\E", 
    :route-name :foobar.service/movies-for-today-page} 
{:path-parts ["" "movies" :iso-date], 
    :path-params [:iso-date], 
    :interceptors 
    [{:name :foobar.service/fetch-movies, 
    :enter 
    #object[io.pedestal.interceptor.helpers$on_request$fn__7401 0x2aa85cc4 "[email protected]"], 
    :leave nil, 
    :error nil} 
    {:name :foobar.service/movies-for-date-page, 
    :enter 
    #object[io.pedestal.interceptor.helpers$before$fn__7359 0x93fb20b "[email protected]"], 
    :leave nil, 
    :error nil}], 
    :path "/movies/:iso-date", 
    :path-constraints {:iso-date "(\\d{4}-\\d{2}-\\d{2})"}, 
    :query-constraints {}, 
    :method :get, 
    :path-re #"/\Qmovies\E/(\d{4}-\d{2}-\d{2})", 
    :route-name :foobar.service/movies-for-date-page}) 

ответ

2

Я решил эту проблему в пьедестале версия 0.4.1-SNAPSHOT.

(io.pedestal.http.route/router my-routes :linear-search)

Использование :linear-search, вместо :prefix-tree.