首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从compojure提供index.html文件

从compojure提供index.html文件
EN

Stack Overflow用户
提问于 2016-03-06 15:42:21
回答 3查看 927关注 0票数 4

我对clojure和compojure还不熟悉,并且尝试了compojure和ring,以创建一个基本的web应用程序。

这是我的handler.clj

代码语言:javascript
复制
(ns gitrepos.handler
  (:require [compojure.core :refer :all]
            [compojure.route :as route]
            [ring.util.response :as resp]
            [ring.middleware.defaults :refer [wrap-defaults site-defaults]]))

(defroutes app-routes
  (GET "/" [] (resp/file-response "index.html" {:root "public"}))
  (route/not-found "Not Found"))

(def app
  (wrap-defaults app-routes site-defaults))

我在/resources/public下有这个index.html文件,但是应用程序没有呈现这个html文件。相反,让找不到

我搜索了很多它,甚至这个在Compojure中在/默认情况下向index.html提供服务似乎也解决不了这个问题。

不知道我在这里错过了什么。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-03-08 16:52:22

也许您想尝试使用一些模板库,比如塞尔默。所以你可以这样做:

代码语言:javascript
复制
(defroutes myapp
  (GET "/hello/" []
    (render-string (read-template "templates/hello.html"))))

或者传递一些价值:

代码语言:javascript
复制
(defroutes myapp
  (GET "/hello/" [name]
    (render-string (read-template "templates/hello.html") {name: "Jhon"})))

正如@piotrek所说:

代码语言:javascript
复制
(GET  "/" [] (resource-response "index.html" {:root "public"}))
票数 1
EN

Stack Overflow用户

发布于 2016-03-06 16:15:01

纳文

这里有一个我自己的片段,似乎很有用。与您的相比,您在defroutes中没有资源路径。

代码语言:javascript
复制
(defroutes default-routes
  (route/resources "public")
  (route/not-found
   "<h1>Resource you are looking for is not found</h1>"))

(defroutes app
  (wrap-defaults in-site-routes site-defaults)
  (wrap-defaults test-site-routes site-defaults)
  (wrap-restful-format api-routes)
  (wrap-defaults default-routes site-defaults))
票数 1
EN

Stack Overflow用户

发布于 2016-03-06 17:00:05

您不需要指定使用resoures/public在此目录下使用file-response服务文件的路由,这要归功于site-defaults。您所缺少的唯一部分是将/路径映射到/index.html,这可以用您从另一个问题中提到的代码来完成。因此,解决办法是:

代码语言:javascript
复制
(defn wrap-dir-index [handler]
  (fn [req]
    (handler
      (update
        req
        :uri
        #(if (= "/" %) "/index.html" %)))))

(defroutes app-routes
  (route/not-found "Not Found"))

(def app
  (-> app-routes
    (wrap-defaults site-defaults)
    (wrap-dir-index)

另外,您应该更喜欢使用ring.util.response/resource-response,因为它服务于类路径中的文件,并且当您将应用程序打包到jar文件中时,它也会工作。file-response使用文件系统来定位文件,并且无法从jar文件内部工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35828884

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档