【发布时间】:2020-03-06 06:32:08
【问题描述】:
在我的 Compojure/Ring Web 应用程序的处理程序中,我需要使用 site-defaults 中间件提供一组路由,并使用 api-defaults 中间件提供另一组单独的路由。我该怎么做?
下面的代码仅使用site-defaults 中间件提供一组路由。我应该添加什么来使用 api-defaults 中间件为第二组路由 (api-routes) 提供服务?
(web-experiment.handler
(:require [compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :refer [wrap-defaults
site-defaults
api-defaults]]
[web-experiment.views :refer :all]))
(defroutes app-routes
(GET "/" [] (index-page))
(GET "/about" [] (about-page))
(route/not-found "Not Found"))
(defroutes api-routes
(GET "/grapefruit" [:as {body :body}] (grapefruit-api body))
(GET "/factory" [:as {body :body}] (factory-api body))
(GET "/umbrella" [:as {body :body}] (umbrella-api body))
(route/not-found "Not Found"))
(def app
(wrap-defaults app-routes site-defaults))
;; TODO: Add api-routes. How to use api-defaults middleware to serve api-routes?
我读过这些:
Serving app and api routes with different middleware using Ring and Compojure - 无法解决问题,因为提供的解决方案不适用于使用
site-defaults配置的wrap-defaults中间件。https://github.com/ring-clojure/ring-anti-forgery/pull/14 - 没有为我遇到的问题提供明确的解决方案(即代码 sn-p)。
【问题讨论】: