diff --git a/doc/SUMMARY.md b/doc/SUMMARY.md index 7d168cce..c3879529 100644 --- a/doc/SUMMARY.md +++ b/doc/SUMMARY.md @@ -21,6 +21,7 @@ * [Dev Workflow](advanced/dev_workflow.md) * [Ring](ring/README.md) * [Ring-router](ring/ring.md) + * [Reverse-routing](ring/reverse_routing.md) * [Default handler](ring/default_handler.md) * [Static Resources](ring/static.md) * [Dynamic Extensions](ring/dynamic_extensions.md) diff --git a/doc/ring/README.md b/doc/ring/README.md index 233547f4..dae3335e 100644 --- a/doc/ring/README.md +++ b/doc/ring/README.md @@ -1,6 +1,7 @@ # Ring * [Ring-router](ring.md) +* [Reverse-routing](reverse_routing.md) * [Default handler](default_handler.md) * [Static Resources](static.md) * [Dynamic Extensions](dynamic_extensions.md) diff --git a/doc/ring/reverse_routing.md b/doc/ring/reverse_routing.md new file mode 100644 index 00000000..9cfd61c7 --- /dev/null +++ b/doc/ring/reverse_routing.md @@ -0,0 +1,33 @@ +# Reverse routing with Ring + +Both the `router` and the `match` are injected into Ring Request (as `::r/router` and `::r/match`) by the `reitit.ring/ring-handler` and with that, available to middleware and endpoints. + +Below is an example how to use the `router` to do reverse routing from a ring handler: + +```clj +(require '[reitit.core :as r]) +(require '[reitit.ring :as ring]) + +(def app + (ring/ring-handler + (ring/router + [["/users" {:get (fn [{:keys [::r/router]}] + {:status 200 + :body (for [i (range 10)] + {:uri (:path (r/match-by-name router ::user {:id i}))})})}] + ["/users/:id" {:name ::user + :get (constantly {:status 200, :body "user..."})}]]))) + +(app {:request-method :get, :uri "/users"}) +;{:status 200, +; :body [{:uri "/users/0"} +; {:uri "/users/1"} +; {:uri "/users/2"} +; {:uri "/users/3"} +; {:uri "/users/4"} +; {:uri "/users/5"} +; {:uri "/users/6"} +; {:uri "/users/7"} +; {:uri "/users/8"} +; {:uri "/users/9"}]} +```