Tag:

Compojure路由与不同的中间件

我正在使用Compojure(以及Ring和相关的中间件)在Clojure中编写一个API。 我试图根据路线应用不同的validation码。 考虑下面的代码: (defroutes public-routes (GET "/public-endpoint" [] ("PUBLIC ENDPOINT"))) (defroutes user-routes (GET "/user-endpoint1" [] ("USER ENDPOINT 1")) (GET "/user-endpoint2" [] ("USER ENDPOINT 1"))) (defroutes admin-routes (GET "/admin-endpoint" [] ("ADMIN ENDPOINT"))) (def app (handler/api (routes public-routes (-> user-routes (wrap-basic-authentication user-auth?))))) (-> admin-routes (wrap-basic-authentication admin-auth?))))) 这不能按预期的方式工作,因为wrap-basic-authentication的确包装了路由,所以无论缠绕的路由如何都可以尝试。 具体来说,如果请求需要路由到admin-routes , user-auth? 仍然会被尝试(并失败)。 我使用context来根据一个共同的基本path下的一些路由,但它是一个相当的约束(下面的代码可能无法正常工作,只是为了说明这个想法): (defroutes user-routes (GET "-endpoint1" [] […]