Clojure 如何确保中间件不会被包装两次?

Clojure 如何确保中间件不会被包装两次?,clojure,middleware,ring,Clojure,Middleware,Ring,如何确保中间件不会被应用两次 我的应用程序正在使用bidi,我的路由和处理程序是分开的。因此,我的最后一个环处理程序有一些中间件(例如wrap params和wrap session),我的一些处理程序有自己的自定义中间件。我可以手动监视我的主处理程序的构造函数和处理程序文件,但我不希望依赖手动警戒 是否有一种设计可以帮助更好地管理中间件?还是图书馆 我的结构如下所示: 1. routes 2. handlers \

如何确保中间件不会被应用两次

我的应用程序正在使用
bidi
,我的路由和处理程序是分开的。因此,我的最后一个环处理程序有一些中间件(例如
wrap params
wrap session
),我的一些处理程序有自己的自定义中间件。我可以手动监视我的主处理程序的构造函数和处理程序文件,但我不希望依赖手动警戒

是否有一种设计可以帮助更好地管理中间件?还是图书馆

我的结构如下所示:

1. routes                                 2. handlers
      \                                      /
       \                                    /
    3. (bidi.ring/make-handler routes handlers)
可以在
2
中包装某些内容,然后再在
3
中包装


3
实际上是一个函数,而
make处理程序在其
start
中被调用<代码>处理程序
路由
来自
3
的组件依赖项。我曾考虑使用
包装中间件
方法,在
1
2
中添加另一个协议,但中间件的顺序非常重要。例如(buddy auth的)
wrap身份验证取决于
wrap session
&
wrap params
对于您控制的中间件,它相当简单,您可以让每个中间件在请求中添加一个带有其名称的密钥,如果该密钥在其收到的任何请求中,您可以将其保留(或者不保留,如果您觉得宽大的话)。对于您无法控制的中间件,我想您必须盯着代码认真思考,或者像您描述的那样“手动警惕”