我使用lein创建了一个项目,然后在项目的根目录中创建了一个目录public来放置静态内容。
但是,静态内容未按预期提供。
这是defroutes:
(defroutes greeter
(GET "/greeter/working" []
(html
[:html
[:head [:tile "bla"]]
[:body [:image "oops.jpg"]]
]
)
)
(GET "/greeter/sayhi" [] "say hi")
(GET "/greeter/" [] "top level")
(route/files "/" {:root (str (System/getProperty "user.dir") "\\public")})
(defn -main []
(run-jetty greeter {:port 3000 :join? false}))
答案 0 :(得分:7)
确保您知道“user.dir”实际位于何处。它不是您的主目录,它是您的应用程序的工作目录,通常是您运行lein ring server
的位置。
我使用以下handler.clj文件创建了一个新的Compojure项目来调试它并验证放置public/
的位置:
(ns static-files.handler
(:use compojure.core)
(:require [compojure.handler :as handler]
[compojure.route :as route]))
(def root (str (System/getProperty "user.dir") "/public"))
(defroutes app-routes
(GET "/" [] "Hello World")
(route/files "/" (do (println root) {:root root}))
(route/resources "/")
(route/not-found "Not Found"))
(def app
(handler/site app-routes))
答案 1 :(得分:0)
重要的一行是:
(route/resources "/")
使用leiningen,公共文件位于项目的resources /公共目录中