Clojure - 结合基座路线

时间:2015-11-03 09:48:49

标签: 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。

1 个答案:

答案 0 :(得分:3)

它就像

一样简单
(def all-routes (concat api-routes site-routes))

解释从这里开始https://github.com/pedestal/pedestal/blob/master/guides/documentation/service-routing.md#defining-route-tables,声明

  

路由表只是一个数据结构;在我们的例子中,它是一系列地图。

基座团队将地图序列路由表格称为详细格式,并设计路径表的简洁格式,这就是我们供给defroutedefroute然后将我们的简洁格式转换为详细格式。

您可以在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组合。

这就是我喜欢基座团队遵循的一个基本原理之一:通用数据操作在这种情况下,一个详细的格式化路由表只是一个地图 - 一个普通的clojure的数据结构,可以使用常规的clojure.core数据结构操作函数(如concat)进行检查和操作。即使是简洁的格式也是一个简单的clojure数据结构,可以用相同的方法轻松检查和操作。