Clojure - 结合基座路线
Clojure - combine pedestal routes
如何在 Pedestal 中合并路由?
(defroutes api-routes [...])
(defroutes site-routes [...])
(combine-routes api-routes site-routes) ;; should be a valid route as well
注意:这是一个与 Combining routes in Compojure 类似的问题,但针对的是 Pedestal。
就像
一样简单
(def all-routes (concat api-routes site-routes))
A route table is simply a data structure; in our case, it is a sequence of maps.
pedestal 团队称地图序列路线table形式为详细格式,他们设计了一个 简洁格式 路线 table 这是我们提供给 defroute
的。 defroute
然后将我们的简洁格式转换为详细格式。
你可以在repl里自己查一下
;; here we supply a terse route format to defroutes
> (defroutes routes
[[["/" {:get home-page}
["/hello" {:get hello-world}]]]])
;;=> #'routes
;; then we pretty print the verbose route format
> (pprint routes)
;;=>
({:path-parts [""],
:path-params [],
:interceptors
[{:name :mavbozo-pedestal.core/home-page,
:enter
#object[io.pedestal.interceptor$eval7317$fn__7318$fn__7319 0x95d91f4 "io.pedestal.interceptor$eval7317$fn__7318$fn__7319@95d91f4"],
:leave nil,
:error nil}],
:path "/",
:method :get,
:path-re #"/\Q\E",
:route-name :mavbozo-pedestal.core/home-page}
{:path-parts ["" "hello"],
:path-params [],
:interceptors
[{:name :mavbozo-pedestal.core/hello-world,
:enter
#object[io.pedestal.interceptor$eval7317$fn__7318$fn__7319 0x4a168461 "io.pedestal.interceptor$eval7317$fn__7318$fn__7319@4a168461"],
:leave nil,
:error nil}],
:path "/hello",
:method :get,
:path-re #"/\Qhello\E",
:route-name :mavbozo-pedestal.core/hello-world})
因此,因为基本路线只是一系列地图,我们可以轻松地将多个非重叠路线与 concat
组合起来。
这就是我喜欢 pedestal 团队遵循的 clojure 原则之一:通用数据操作,在这种情况下,冗长的格式化路由 table 只是一个map -- 一个普通的 clojure 数据结构,可以使用 clojure.core 的常规数据结构操作函数(例如 concat
)进行检查和操作。即使是简洁的格式也是一种普通的 clojure 数据结构,可以使用相同的方式轻松检查和操作。
如何在 Pedestal 中合并路由?
(defroutes api-routes [...])
(defroutes site-routes [...])
(combine-routes api-routes site-routes) ;; should be a valid route as well
注意:这是一个与 Combining routes in Compojure 类似的问题,但针对的是 Pedestal。
就像
一样简单(def all-routes (concat api-routes site-routes))
A route table is simply a data structure; in our case, it is a sequence of maps.
pedestal 团队称地图序列路线table形式为详细格式,他们设计了一个 简洁格式 路线 table 这是我们提供给 defroute
的。 defroute
然后将我们的简洁格式转换为详细格式。
你可以在repl里自己查一下
;; here we supply a terse route format to defroutes
> (defroutes routes
[[["/" {:get home-page}
["/hello" {:get hello-world}]]]])
;;=> #'routes
;; then we pretty print the verbose route format
> (pprint routes)
;;=>
({:path-parts [""],
:path-params [],
:interceptors
[{:name :mavbozo-pedestal.core/home-page,
:enter
#object[io.pedestal.interceptor$eval7317$fn__7318$fn__7319 0x95d91f4 "io.pedestal.interceptor$eval7317$fn__7318$fn__7319@95d91f4"],
:leave nil,
:error nil}],
:path "/",
:method :get,
:path-re #"/\Q\E",
:route-name :mavbozo-pedestal.core/home-page}
{:path-parts ["" "hello"],
:path-params [],
:interceptors
[{:name :mavbozo-pedestal.core/hello-world,
:enter
#object[io.pedestal.interceptor$eval7317$fn__7318$fn__7319 0x4a168461 "io.pedestal.interceptor$eval7317$fn__7318$fn__7319@4a168461"],
:leave nil,
:error nil}],
:path "/hello",
:method :get,
:path-re #"/\Qhello\E",
:route-name :mavbozo-pedestal.core/hello-world})
因此,因为基本路线只是一系列地图,我们可以轻松地将多个非重叠路线与 concat
组合起来。
这就是我喜欢 pedestal 团队遵循的 clojure 原则之一:通用数据操作,在这种情况下,冗长的格式化路由 table 只是一个map -- 一个普通的 clojure 数据结构,可以使用 clojure.core 的常规数据结构操作函数(例如 concat
)进行检查和操作。即使是简洁的格式也是一种普通的 clojure 数据结构,可以使用相同的方式轻松检查和操作。