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
对于您控制的中间件,它相当简单,您可以让每个中间件在请求中添加一个带有其名称的密钥,如果该密钥在其收到的任何请求中,您可以将其保留(或者不保留,如果您觉得宽大的话)。对于您无法控制的中间件,我想您必须盯着代码认真思考,或者像您描述的那样“手动警惕”