带有基座Clojure服务器的通用[/ * proxy:any]和特定[/ service / x:post ..]路由

时间:2018-06-26 12:36:08

标签: clojure routes webserver pedestal

我是具有基座(pedestal.io)的新手,并且我尝试代理从浏览器获得的所有请求,除了一些特定的请求(需要一些额外的拦截器)。这些是我的路线:

(def routes #{
           ["/*proxy" :any [(proxy-handler (server :dan-server))]]
           ["/service/storyboard/StoryboardLayer/auto" :post [dummy-interceptor (proxy-handler (server :dan-server))] :route-name :save-layer-route]
           })

但是我从来没有得到过虚拟拦截器的称呼。这些应该如何结合?

1 个答案:

答案 0 :(得分:0)

这里也描述了问题:https://github.com/pedestal/pedestal/issues/532#issuecomment-324881362

“我对http://pedestal.io/reference/routing-quick-reference的理解是有意为之:'通配符路由始终会胜过同一子树中的显式路径。”根处的通配符路由会胜过其他所有内容。”

修复

在页面底部,http://pedestal.io/reference/routing-quick-reference说我们需要说要使用哪个路由器,一个是:linear-router

为解决此问题,我在服务映射中添加了此地址,后来将其用于创建服务器

(def service {
          ...
          ::http/router :linear-search

现在,如果我切换路线,这是可行的,因为它们是按顺序(线性)进行分析的。

(def routes #{
       ["/service/storyboard/StoryboardLayer/auto" :post [dummy-interceptor (proxy-handler (server :dan-server))] :route-name :save-layer-route]
       ["/*proxy" :any [(proxy-handler (server :dan-server))]]
       })