使用Ring和Compojure提供数据

时间:2014-03-31 23:55:17

标签: json clojure compojure ring

我正在配置和设置Web应用程序以静态地提供JSON数据http://www.ericrochester.com/clj-data-analysis/data/census-race.json文件。

我的依赖项:

  :dependencies [[org.clojure/clojure "1.5.1"]
                 [org.clojure/clojurescript "0.0-2197"]
                 [ring/ring-core "1.1.7"]
                 [ring/ring-jetty-adapter "1.1.7"]
                 [compojure "1.1.3"]
                 [hiccup "1.0.2"]
                 [lein-cljsbuild "0.2.10"]]

正如标题所说,我使用Ring作为开发插件,即

  :plugins [[lein-ring "0.8.3"]]

Leiningen项目

   (ns test-app.core
   (:require [compojure.route :as route]
             [compojure.handler :as handler]
             [clojure.string :as str])
   (:use compojure.core
             ring.adapter.jetty
             [ring.middleware.content-type :only
             (wrap-content-type)]
             [ring.middleware.file :only (wrap-file)]
             [ring.middleware.file-info :only
             (wrap-file-info)]
             [ring.middleware.stacktrace :only
             (wrap-stacktrace)]
             [ring.util.response :only (redirect)]))

并在project.clj

  :ring {:handler test-app.core/app}

我不确定这是否会告诉Ring在哪里使用Web应用程序 是

此外,我不确定如何静态地提供JSON数据文件。我已经读过“Ring从项目的/ resources目录中提供静态文件。在这种情况下,创建目录/ resources / data并将从http://www.ericrochester.com/clj-data-analysis/data/census-race.json下载的数据文件放入其中。”

这主要是关于创建 / resources / data 目录的最后一部分,我在实现中丢失了该目录。有人可以说明这部分是如何完成的吗?

如果我能学会克服这个问题,我希望建立路线和处理程序,即

  (defroutes site-routes
     (GET "/" [] (redirect "/data/census-race.json"))
     (route/resources "/")
     (route/not-found "Page not found"))

 (def app
    (-> (handler/site site-routes)
    (wrap-file "resources")
    (wrap-file-info)
    (wrap-content-type)))

2 个答案:

答案 0 :(得分:1)

  

并在project.clj

中      

:ring {:handler test-app.core / app}

     

我不确定这是否会告诉Ring在哪里使用Web应用程序   是

当您运行$ lein ring server-headless时,它会在app命名空间中查找test-app.core。您的core.clj文件中应该包含以下内容:

(def app
  (handler/site app-routes))
  

这主要是关于创建/ resources / data的最后一部分   我在执行中丢失的目录。有人可以表明   这部分是如何完成的?

在项目目录的根目录中,您应该有一个resources文件夹。在data文件夹中创建一个resources文件夹。

我不确定你遇到了什么问题?

答案 1 :(得分:1)

如果你的项目是这样的:

project.clj
src/test_app/core.clj
resources/public/data/census-race.json

然后,当您请求路径site-routes时,您的/data/census-race.json处理程序将提供该JSON文件。

您不需要任何额外的中间件,例如wrap-filewrap-file-infowrap-content-type,因为compojure.route/resources已经完成了您需要的一切。