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

Add middleware to default Compojure project

我已经在我的代码中使用了 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"] 中间件。我理解这个概念,但我一直无法找到扩展此配置的语法。

感谢您的宝贵时间!

bk/ring-gzip 站点上的示例只需要稍微调整一下。来自 compojure 的路由 return 是一个处理程序;包装器采用处理程序和 return 处理程序。如果您需要其他处理程序,如果它们作用于请求或响应主体,则它们应该在 gzip 之前。

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

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