diff --git a/modules/reitit-http/src/reitit/http.cljc b/modules/reitit-http/src/reitit/http.cljc index fa4c26fc..be2d49e3 100644 --- a/modules/reitit-http/src/reitit/http.cljc +++ b/modules/reitit-http/src/reitit/http.cljc @@ -89,7 +89,8 @@ default-interceptors (->> interceptors (map #(interceptor/into-interceptor % nil (r/options router)))) default-queue (interceptor/queue executor default-interceptors) - enrich-request (ring/create-enrich-request inject-match? inject-router?)] + enrich-request (ring/create-enrich-request inject-match? inject-router?) + enrich-default-request (ring/create-enrich-default-request inject-router?)] {:name ::router :enter (fn [{:keys [request] :as context}] (if-let [match (r/match-by-path router (:uri request))] @@ -101,7 +102,9 @@ context (assoc context :request request) queue (interceptor/queue executor (concat default-interceptors interceptors))] (interceptor/enqueue executor context queue)) - (interceptor/enqueue executor context default-queue))) + (let [request (enrich-default-request request router) + context (assoc context :request request)] + (interceptor/enqueue executor context default-queue)))) :leave (fn [context] (if-not (:response context) (assoc context :response (default-handler (:request context))) diff --git a/test/clj/reitit/pedestal_test.clj b/test/clj/reitit/pedestal_test.clj index 86211927..8a0ea30b 100644 --- a/test/clj/reitit/pedestal_test.clj +++ b/test/clj/reitit/pedestal_test.clj @@ -41,3 +41,25 @@ (:io.pedestal.http/service-fn))] (is (= "ok" (:body (io.pedestal.test/response-for service :get "/ok")))) (is (= 500 (:status (io.pedestal.test/response-for service :get "/fail")))))) + +(deftest pedestal-inject-router-test + (let [check-router (fn [r] (when-not (:reitit.core/router r) + (throw (ex-info "Missing :reitit.core/router!" {})))) + interceptor {:name ::needs-router + :enter (fn [{:as context :keys [request]}] + (check-router request) + context)} + router (pedestal/routing-interceptor + (http/router + ["" + ["/ok" (fn [r] (check-router r) {:status 200, :body "ok"})]]) + nil + {:interceptors [interceptor]}) + service (-> {:io.pedestal.http/request-logger nil + :io.pedestal.http/routes []} + (io.pedestal.http/default-interceptors) + (pedestal/replace-last-interceptor router) + (io.pedestal.http/create-servlet) + (:io.pedestal.http/service-fn))] + (is (= "ok" (:body (io.pedestal.test/response-for service :get "/ok")))) + (is (= "Not Found" (:body (io.pedestal.test/response-for service :get "/not-existing"))))))