2016-05-27 6 views
0

У меня есть index.html находится в resources/public/index.html и определил следующие маршруты (приложение разбивается больше, чем это, просто сделать код краткого):загрузки ответа кольца вместо 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, он правильно отображает файл, поэтому я предположил, что моя маршрутизация некорректна, но, взглянув на примеры, я не слишком уверен, почему.

+0

Возможный дубликат [Файл загружен вместо того, чтобы отображаться в браузере] (http://stackoverflow.com/ вопросы/35548372/файл-загружен-вместо-бытия-отображается-в-браузере) –

+0

Эта точная проблема разрешена [здесь] (http://stackoverflow.com/questions/7729628/serve-index- HTML-на-по-умолчанию-в-compojure). – kongeor

+0

@kongeor, использующий 'resp/redirect', все еще заставляет html-файл быть downlaoded не отображаться –

ответ

0

Это точно такая же проблема с этим question.

Вам нужно создать промежуточное программное обеспечение, чтобы обновить запрос:

(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.

0

Используйте это:

(:require [clojure.java.io :as io] 
      [ring.middleware.resource :as resource]) 

(defroutes routes 

    (GET "/" [] 
      (io/resource "index.html"))) 

использовать также промежуточное программное обеспечение для ресурса оберточной

(resource/wrap-resource "/public")