Я пытаюсь понять, почему Ring resource-response
решит ответить с типом контента application/octet-stream
. Недавно я обновил некоторый пример кода, из которого я учился, так что он использует новый ring-defaults
. До использования ring-defaults
этот код отвечал на тип содержимого html
. Почему теперь вы выбираете октет-поток?Почему ответ ресурса кольца отвечает типом содержимого приложения/октета-потока?
(ns replays.handler
(:require [compojure.core :refer [GET defroutes]]
[compojure.route :as route]
[ring.util.response :refer [response resource-response]]
[ring.middleware.json :as middleware]
[ring.middleware.defaults :refer [wrap-defaults api-defaults]]))
(defroutes app-routes
(GET "/" [] (resource-response "index.html" {:root "public"}))
(GET "/widgets" [] (response [{:name "Widget 1"} {:name "Widget 2"}]))
(route/resources "/public")
(route/not-found "not found"))
(def app
(-> app-routes
(middleware/wrap-json-body)
(middleware/wrap-json-response)
(wrap-defaults api-defaults)))
И для номера версии, вот файл проекта ...
(defproject replays "0.1.0-SNAPSHOT"
:url "http://example.com/FIXME"
:description "FIXME: write description"
:plugins [[lein-pdo "0.1.1"]
[lein-ring "0.9.3"]
[lein-cljsbuild "1.0.5"]]
:dependencies [[org.clojure/clojure "1.6.0"]
[org.clojure/core.async "0.1.346.0-17112a-alpha"]
[org.clojure/clojurescript "0.0-3126"]
[org.omcljs/om "0.8.8"]
[ring/ring-core "1.3.2"]
[ring/ring-json "0.3.1"]
[ring/ring-defaults "0.1.4"]
[compojure "1.3.2"]
[cljs-http "0.1.29"]]
:source-paths ["src/clj"]
:ring {:handler replays.handler/app}
:cljsbuild {:builds [{:id "dev"
:source-paths ["src/cljs"]
:compiler {:output-to "resources/public/js/app.js"
:output-dir "resources/public/js/out"
:optimizations :none
:source-map true}}]}
:aliases {"up" ["pdo" "cljsbuild" "auto" "dev," "ring" "server-headless"]}
:profiles {:dev {:dependencies [[javax.servlet/servlet-api "2.5"]
[ring-mock "0.1.5"]]}})
я не уверен, но я думаю, что это связано с тем, что [ 'наматывается контент-type' ] (https://ring-clojure.github.io/ring/ring.middleware.content-type.html) использует расширение в вашем URI для установки заголовков типов контента? Его можно обойти, добавив расширение в URI или вручную настроив тип контента '(ассоциативный (ресурс-ответ ...) [: заголовки« Content-Type »]« text/html »)' – noisesmith
Я считаю, что ваше предложение - подходящий способ сделать это. Есть также функция, которая делает что-то подобное: http://ring-clojure.github.io/ring/ring.util.response.html#var-content-type – Ryan
Да, я избегал ответа, потому что в то время как Я предлагаю работать, он также чувствует, как делать вручную то, что должно быть для вас промежуточным программным обеспечением. Но если вы посмотрите на источник этой функции, он вызывает заголовок, а заголовок делает в значительной степени то, что я поставил выше. – noisesmith