Noirでは各、ルーティング後の処理の前に行う前処理をpre-routeとして定義できるようですが、Compojure自体にはその機能は無さそうだったので、sandbarのstateful-sessionを参考にして、下記の様なコードで実現しました。
広告
(defroutes app-routes (GET "/" {} "Hello World")) (defn wrap-pre* [handler] (fn [request] (let [response (handler request)] (when response ;; ========== ;; 前処理 ;; ========== response)))) (defn wrap-pre ([handler] (wrap-pre handler {})) ([handler options] (-> handler wrap-pre*))) (def app (-> app-routes (wrap-pre) (wrap-stateful-session))) (defn -main [] (let [port (Integer/parseInt (get (System/getenv) "PORT" "8080"))] (run-jetty (handler/site app) {:port port}))) |