【问题标题】:Serving data with Ring and Compojure使用 Ring 和 Compojure 提供数据
【发布时间】:2014-05-11 13:09:36
【问题描述】:

我正在配置和设置一个 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)))

【问题讨论】:

    标签: json clojure compojure ring


    【解决方案1】:

    在project.clj中

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

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

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

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

    最后一部分主要是关于创建 /resources/data 我在实施中迷失的目录。有人可以显示 这部分是怎么做的?

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

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

    【讨论】:

    【解决方案2】:

    如果您的项目如下所示:

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

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

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

    【讨论】:

    • 我不确定如何将census-race.json 放入路径resources/data @JohnCromartie
    猜你喜欢
    • 2013-05-25
    • 2011-12-10
    • 2014-10-10
    • 2013-07-18
    • 2014-11-21
    • 2015-03-17
    • 1970-01-01
    • 2011-04-21
    • 2015-04-16
    相关资源
    最近更新 更多