打破环中间件场景

sov*_*ova 3 middleware clojure ring

Ring非常流畅,并且对于中间件有一些非常合理的默认值.

当我通过leiningen(lein)创建一个新应用程序时,我在路由器/处理程序中得到了类似的东西

(def app
  (wrap-defaults app-routes site-defaults))
Run Code Online (Sandbox Code Playgroud)

https://github.com/ring-clojure/ring-defaults

现在我想添加更多中间件(cemerick/friend),这样我就可以进行登录认证等操作.

那么,我如何将上述内容翻译成更像环形中间件"堆栈"的内容,如页面底部https://github.com/ring-clojure/ring-defaults/blob/master/src/ring /middleware/defaults.clj

(def app
  (-> handler  
    (wrap-anti-forgery)
    (wrap-flash)
    (wrap-session)
    (wrap-keyword-params)
    (wrap-resource)
    (wrap wrap-file)))
Run Code Online (Sandbox Code Playgroud)

Art*_*ldt 5

因为ring只是为中间件使用函数组合,你可以简单地将朋友包裹在调用中以包装默认值:

(def app 
  (my-additional-mieddleware 
    (wrap-defaults app-routes site-defaults)
  arguments to my additional middleware))
Run Code Online (Sandbox Code Playgroud)

或者您可以将其线程化(例如,当您有多个中间件时):

(def app
  (-> (wrap-defaults app-routes site-defaults)
      (friend-stuff arg arg)
      (other-middleware arg arg arg))
Run Code Online (Sandbox Code Playgroud)

正确获取中间件的顺序依然取决于您: - /