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

时间:2015-05-29 13:07:04

标签: clojure middleware ring

如何确保中间件未应用两次?

我的应用程序正在使用bidi,我的路由和处理程序是分开的。所以我的最终环处理程序有一些中间件(例如wrap-paramswrap-session),我的一些处理程序有自己的自定义中间件。我可以手动监视我的主处理程序的构造函数和我的处理程序文件,但我宁愿不依赖于手动警惕。

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

我的结构如下:

1. routes                                 2. handlers
      \                                      /
       \                                    /
    3. (bidi.ring/make-handler routes handlers)

可以在2中包装内容,然后再在3中包装。

3实际上是componentmake-handler会调用starthandler& routes来自3组件的依赖项。我考虑过向1&添加另一个协议2使用wrap-middlewares方法,但中间件的顺序非常重要。例如(buddy-auth's)wrap-authentication取决于wrap-session& wrap-params

1 个答案:

答案 0 :(得分:1)

对于中间件你控制它是相当简单的,你可以让每个中间件添加一个密钥,其名称为请求和保释(如果你感觉宽松,则为noop)如果该密钥在任何收到的请求。对于你无法控制的中间件,我认为他们一直盯着代码并且非常努力地思考,或者当你把它描述为“手动警惕”时。