2016-03-13 4 views
0

Я хочу использовать следующий маршрут для любого пути запроса GET, чтобы вместо этого использовать интерфейсную маршрутную библиотеку (реагировать-маршрутизатор).Запрос соответствия и GET в Compojure для браузера с взаимодействием с маршрутизаторомИстория

(GET "/" [] (resource-response "index.html" {:root "public"})) 

Это то, что я пытался:

(GET "/*" [] (resource-response "index.html" {:root "public"})) 
(rfn [] (resource-response "index.html" {:root "public"})) 
(GET "/:any{.*}" [] (resource-response "index.html" {:root "public"})) 
(GET "/*" [] (ring.util.response/content-type 
        (ring.util.response/resource-response "index.html" {:root "public"}) "text/html")) 
(GET "/*" [] (clojure.java.io/resource "public/index.html")) 

Все они дают ту же ошибку:

Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://localhost:5000/index.css". 
bundle.js:1 Uncaught SyntaxError: Unexpected token < 

И Неожиданный токен в index.html

Так первая < мой вопрос в том, как я могу адаптировать свой стек Compojure/Ring/Immutant для воспроизведения ni с реагирующим маршрутизатором?

UPDATE: Я также попробовал следующее связующее программное обеспечение, чтобы изменить все запросы к корню, но не повезло:

(defn wrap-dir-index [handler] 
    (fn [req] 
    (handler 
    (assoc req :uri "/")))) 
+0

Взгляните на http://stackoverflow.com/questions/35828884/serving-index-html-file-from-compojure/35829722#35829722 - при использовании этого кода все ваши файлы из 'resources/public' будет обслуживаться сервером, и все пути, заканчивающиеся на '/', будут служить '/ index.html'. –

+0

Я хочу, чтобы каждый GET служил /index.html, а не только тот, который заканчивается на /. Я обновил свой вопрос с помощью других альтернатив, но все же не смог получить работу, как я хочу. – user3139545

+0

Что относительно других ресурсов, таких как javascript и css? Все они встроены в ваш index.html? Или, может быть, вы хотите обслуживать все, что у вас есть в 'resources/public' и fallback, чтобы обслуживать' index.html', если конкретный ресурс не найден? –

ответ

1

Вы можете использовать wrap-resource, как описано на Ring wiki page в сочетании с уловом всех маршрут:

(defroutes handler 
    (GET "/" [] 
    (-> (resource-response "index.html" {:root "public"}) 
     (content-type "text/html)) 
    (GET "/*" [] (redirect "/"))) 

(def app 
    (-> handler 
     (wrap-resource "public") 
     (wrap-content-type) 
     (wrap-not-modified)) 

Я думаю, что лучше перенаправить со всех других URL-адресов на «/», поэтому ваше приложение работает всегда с использованием одного и того же базового адреса.