Кольцевой ответ загружает 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") 
Другие вопросы по тегам