发布
社区首页 >问答首页 >如何配置同级基座路由,以便在使用:约束时所有路由都可以访问?

如何配置同级基座路由,以便在使用:约束时所有路由都可以访问?
EN

Stack Overflow用户
提问于 2015-05-02 03:18:06
回答 1查看 274关注 0票数 1

我正在创建一个玩具基座服务,其目的是提供以下资源:

  • /
  • /movies
  • /movies/today
  • /movies/:iso-date,其中:iso-date匹配#-##-#-##

最后一条路由的约束用以下代码段定义:

代码语言:javascript
代码运行次数:0
复制
^:constraints {:iso-date #"\d{4}-\d{2}-\d{2}"}

每当包含此约束的路由出现在路由表中时,我就无法获得它的同级路由/movies/today;相反,我将得到一个“未找到”的响应。但是,当有约束的路由被移除时,/movies/today的GET就成功了。

我用简洁的格式定义的基座路线如下所示:

代码语言:javascript
代码运行次数:0
复制
(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}]]]]])

为了实现我想要的路由行为,我是否正确地构造了这个路由表?

注意:打印编译后的路由给出了我预期的结果,因为所有的路由都显示了生成的:path-re正则表达式匹配,就像在REPL中预期的那样:

代码语言:javascript
代码运行次数:0
复制
({:path-parts [""],
  :path-params [],
  :interceptors
  [{:name :foobar.service/root-page,
    :enter
    #object[io.pedestal.interceptor.helpers$before$fn__7359 0x14501070 "io.pedestal.interceptor.helpers$before$fn__7359@14501070"],
    :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 "io.pedestal.interceptor.helpers$on_request$fn__7401@2aa85cc4"],
    :leave nil,
    :error nil}
   {:name :foobar.service/movies-page,
    :enter
    #object[io.pedestal.interceptor.helpers$before$fn__7359 0x30ffc3c0 "io.pedestal.interceptor.helpers$before$fn__7359@30ffc3c0"],
    :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 "io.pedestal.interceptor.helpers$on_request$fn__7401@2aa85cc4"],
    :leave nil,
    :error nil}
   {:name :foobar.service/movies-for-today-page,
    :enter
    #object[io.pedestal.interceptor.helpers$before$fn__7359 0x3726fc3b "io.pedestal.interceptor.helpers$before$fn__7359@3726fc3b"],
    :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 "io.pedestal.interceptor.helpers$on_request$fn__7401@2aa85cc4"],
    :leave nil,
    :error nil}
   {:name :foobar.service/movies-for-date-page,
    :enter
    #object[io.pedestal.interceptor.helpers$before$fn__7359 0x93fb20b "io.pedestal.interceptor.helpers$before$fn__7359@93fb20b"],
    :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})
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-04 06:20:12

我在0.4.1版快照中解决了这个问题。

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

使用:linear-search,而不是:prefix-tree

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29998012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档