将中间件添加到默认的 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)))
通常首选使用线程宏形式,因为您可能需要编写多个中间件,但您可以只调用函数。
我已经在我的代码中使用了 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)))
通常首选使用线程宏形式,因为您可能需要编写多个中间件,但您可以只调用函数。