Search code examples
clojurecompojure

Serving index.html file from compojure


I'm new to clojure and compojure and trying out the compojure along with ring to create a basic web application.

here is my handler.clj

(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))

i have this index.html file under /resources/public but the application is not rendering this html file. Instead getting Not found

I have searched a lot it, even this Serve index.html at / by default in Compojure does not seems to resolve the issue.

Not sure what am i missing here.


Solution

  • Maybe you want to try use some template library, such as Selmer. So you can do something like this:

    (defroutes myapp
      (GET "/hello/" []
        (render-string (read-template "templates/hello.html"))))
    

    Or passing some value:

    (defroutes myapp
      (GET "/hello/" [name]
        (render-string (read-template "templates/hello.html") {name: "Jhon"})))
    

    And, as @piotrek-Bzdyl said:

    (GET  "/" [] (resource-response "index.html" {:root "public"}))