Ring非常流畅,并且对于中间件有一些非常明智的默认设置。
当我通过leiningen(lein)创建一个新应用程序时,我在路由器/处理程序中得到了类似的东西
(def app
(wrap-defaults app-routes site-defaults))
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)))
答案 0 :(得分:5)
因为ring只是为中间件使用函数组合,你可以简单地将朋友包裹在调用中以包装默认值:
(def app
(my-additional-mieddleware
(wrap-defaults app-routes site-defaults)
arguments to my additional middleware))
或者您可以对其进行线程化(例如,当您有多个中间件时):
(def app
(-> (wrap-defaults app-routes site-defaults)
(friend-stuff arg arg)
(other-middleware arg arg arg))
正确获取中间件的顺序仍由您决定: - /