我在我的 Pedestal 网络应用程序中使用这样的路线:
(def routes
[[["/" ^:interceptors [(body-params/body-params)
middlewares/params
params/keyword-params
coerce-body content-neg-intc
session-interceptor
ensure-db-interceptor
datomic-conn-db-interceptor]
{:get `home-page}]
;; other routes
这个效果很好。但我有很多带有常见拦截器的路线,所以我试图像这样将它们分解出来:
(def default-interceptors
[(body-params/body-params)
middlewares/params
params/keyword-params
coerce-body
content-neg-intc
session-interceptor
ensure-db-interceptor
datomic-conn-db-interceptor])
(def routes
[[["/" ^:interceptors default-interceptors
{:get `home-page}]
;; other routes...
当我导航到这条路线时,出现异常:
clojure.lang.ExceptionInfo:拦截器中的 java.lang.AssertionError :io.pedestal.http.route/router - 断言失败:无法展开 '[#Interceptor{:name :io.pedestal.http.body-params/body -params} #function[io.pedestal.http.ring-middlewares/params] #Interceptor{:name :io.pedestal.http.params/keyword-params} {:name :service/coerce-body, :leave #function [service/fn--26867]} #Interceptor{:名称:io.pedestal.http.content-negotiation/negotiate-content} #Interceptor{:名称:io.pedestal.http.ring-middlewares/session} #Interceptor{ :name :service/ensure-db-interceptor} #Interceptor{:name :service/datomic-conn-db-interceptor}]' 作为路由。 需要动词映射或路径字符串,但找到了类 clojure.lang.PersistentVector
我不确定这里出了什么问题。做我想做的事情的正确方法是什么?
我需要拦截器向量 var 的类型提示
(def default-interceptors
^:interceptors [(body-params/body-params)
middlewares/params
params/keyword-params
coerce-body
content-neg-intc
session-interceptor
ensure-db-interceptor
datomic-conn-db-interceptor])