将中间件添加到默认的Compojure项目

时间:2019-06-29 23:02:20

标签: clojure compojure ring

我已经将Compojure Leiningen模板与我的代码一起使用,但是现在我很难添加中间件。作为参考,这是默认项目:

(ns test.handler
  (:require [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))

(defroutes app-routes
  (GET "/" [] "Hello World")
  (route/not-found "Not Found"))

(def app
  (wrap-defaults app-routes site-defaults))

我的代码在功能上没有偏离。
我想添加[bk/ring-gzip "0.3.0"]中间件。我了解这个概念,但无法找到扩展此配置的语法。

谢谢您的时间!

1 个答案:

答案 0 :(得分:1)

bk / ring-gzip网站上的示例仅需稍作调整。从compojure返回的路由是一个处理程序;包装器获取处理程序并返回处理程序。如果您需要其他处理程序,则如果它们对请求或响应主体起作用,则应在gzip之前。

(def app (-> app-routes
    (wrap-defaults site-defaults)
    (wrap-gzip)))

通常最好使用线程宏形式,因为您可能要编写多个中间件,但是您可以只调用函数。