Кольцевой ответ загружает index.html вместо его рендеринга
У меня есть index.html
находится в resources/public/index.html
и определили следующие маршруты (приложение разбито больше, чем это, просто делая код кратким):
(ns example.example
(:require [compojure.route :as route]))
(defroutes routes
(GET "/" [] (resource-response "index.html" {:root "public"} "text/html")))
(defroutes application-routes
routes
(route/resources "/")
(route/not-found (resource-response "index.html" {:root "public"} "text/html")))
(def application
(wrap-defaults application-routes site-defaults))
Тем не менее, когда я иду в localhost:8090/
он загружает HTML-файл вместо его рендеринга.
Если я пойду к localhost:8090/index.html
он правильно отображает файл, поэтому я предположил, что моя маршрутизация неверна, но, посмотрев на примеры, я не совсем уверен, почему.
2 ответа
Это точно такая же проблема с этим вопросом.
Вам необходимо создать промежуточное ПО для обновления вашего запроса:
(defn wrap-dir-index [handler]
(fn [req]
(handler
(update-in req [:uri]
#(if (= "/" %) "/index.html" %)))))
А затем оберните ваши маршруты:
(def app
(wrap-dir-index (wrap-defaults app-routes site-defaults)))
Полный handler.clj.
Использовать этот:
(:require [clojure.java.io :as io]
[ring.middleware.resource :as resource])
(defroutes routes
(GET "/" []
(io/resource "index.html")))
Также используйте промежуточное ПО для упаковки ресурсов
(resource/wrap-resource "/public")