【问题标题】:Serving static file from compojure and ring从 compojure 和 ring 提供静态文件
【发布时间】:2013-05-25 22:56:37
【问题描述】:

我使用 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}))

【问题讨论】:

  • “未按预期投放”是什么意思?您是否收到 404 未找到?另外,你在 Windows 上吗?

标签: clojure compojure ring


【解决方案1】:

确保您知道“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))

【讨论】:

    【解决方案2】:

    重要的一行是:

    (route/resources "/")
    

    使用 leiningen,公共文件位于项目的 resources/public 目录中

    【讨论】:

      猜你喜欢
      • 2011-12-10
      • 2012-02-11
      • 2014-05-11
      • 2014-10-10
      • 2015-10-19
      • 2016-06-20
      • 2019-12-13
      • 2015-02-05
      • 2013-05-28
      相关资源
      最近更新 更多