分解环形中间件场景
Breaking down the ring middleware scenario
Ring 非常时尚,并且有一些非常合理的中间件默认值。
当我通过 leiningen (lein) 制作新应用时,我在 router/handler
中得到了类似的东西
(def app
(wrap-defaults app-routes site-defaults))
https://github.com/ring-clojure/ring-defaults
现在我想添加更多中间件 (cemerick/friend),这样我就可以做一些事情,比如登录验证。
那么,我如何将上面的内容翻译成更让人联想到环中间件 "stack," 的东西,就像页面底部 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)))
因为 ring 只是使用中间件的函数组合,你可以简单地将 friend 围绕调用来包装默认值:
(def app
(my-additional-middleware
(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))
正确获取中间件的顺序仍然取决于您:-/
Ring 非常时尚,并且有一些非常合理的中间件默认值。
当我通过 leiningen (lein) 制作新应用时,我在 router/handler
中得到了类似的东西(def app
(wrap-defaults app-routes site-defaults))
https://github.com/ring-clojure/ring-defaults
现在我想添加更多中间件 (cemerick/friend),这样我就可以做一些事情,比如登录验证。
那么,我如何将上面的内容翻译成更让人联想到环中间件 "stack," 的东西,就像页面底部 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)))
因为 ring 只是使用中间件的函数组合,你可以简单地将 friend 围绕调用来包装默认值:
(def app
(my-additional-middleware
(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))
正确获取中间件的顺序仍然取决于您:-/