Static resources can be served by using the following two functions:
reitit.ring/create-resource-handler, which returns a Ring handler that serves files from classpath, andreitit.ring/create-file-handler, which returns a Ring handler that servers files from file systemThere are two ways to mount the handlers.
The examples below use reitit.ring/create-resource-handler, but reitit.ring/create-file-handler works the same way.
This is good option if static files can be from non-conflicting paths, e.g. "/assets/*".
(require '[reitit.ring :as ring])
(ring/ring-handler
  (ring/router
    [["/ping" (constantly {:status 200, :body "pong"})]
     ["/assets/*" (ring/create-resource-handler)]])
  (ring/create-default-handler))
To serve static files with conflicting routes, e.g. "/*", one needs to disable the conflict resolution:
(require '[reitit.ring :as ring])
(ring/ring-handler
  (ring/router
    [["/ping" (constantly {:status 200, :body "pong"})]
     ["/*" (ring/create-resource-handler)]]
    {:conflicts (constantly nil)})
  (ring/create-default-handler))
A better way to serve files from conflicting paths, e.g. "/*", is to serve them from the default-handler.
One can compose multiple default locations using reitit.ring/ring-handler.
This way, they are only served if none of the actual routes have matched.
(ring/ring-handler
  (ring/router
    ["/ping" (constantly {:status 200, :body "pong"})])
  (ring/routes
    (ring/create-resource-handler {:path "/"})
    (ring/create-default-handler)))
reitit.ring/create-file-handler and reitit.ring/create-resource-handler take optionally an options map to configure how the files are being served.
| key | description | 
|---|---|
| :parameter | optional name of the wildcard parameter, defaults to unnamed keyword : | 
| :root | optional resource root, defaults to \"public\" | 
| :path | path to mount the handler to. Required when mounted outside of a router, does not work inside a router. | 
| :loader | optional class loader to resolve the resources | 
| :index-files | optional vector of index-files to look in a resource directory, defaults to [\"index.html\"] | 
| :index-redirect? | optional boolean: if true (default false), redirect to index file, if false serve it directly | 
| :canonicalize-uris? | optional boolean: if true (default), try to serve index files for non directory paths (paths that end with slash) | 
| :not-found-handler | optional handler function to use if the requested resource is missing (404 Not Found) | 
:cache, :etag, :last-modified?, and :gzipCan you improve this documentation? These fine people already did:
Tommi Reiman, Loukas Agorgianitis, Miikka Koskinen, Juho Teperi & Tharaka ManawardhanaEdit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs | 
| ← | Move to previous article | 
| → | Move to next article | 
| Ctrl+/ | Jump to the search field |