A tiny HTTP router that operates with a simple data structure where each route is a map inside a vector. Yup, that's it. No magic, no bullshit.
Require the namespace ruuter.core and then pass your routes to the route! function, like this:
(ns myapp.core
(:require [ruuter.core :as ruuter]))
(defn -main [& opts]
(ruuter/route! [{:path "/"
:method :get
:response {:status 200
:body "Hi there!"}}]))
This will start an HTTP server on a default port of 9600 using http-kit under the hood.
The route! function also takes a second, optional argument, which is the options map for http-kit, allowing you to specify the port and so on, like this:
(def routes [{:path "/"
:method :get
:response {:status 200
:body "Hi there!"}}])
(ruuter/route! routes {:port 8080})
Like mentioned above, each route is a map inside of a vector - the order is important only in that the route matcher will return the first result it finds according to :path.
Each route consists of three items:
:pathA string path starting with a forward slash describing the URL path to match.
To create parameters from the path, prepend a colon (:) in front of a path slice like you would with a Clojure keyword. For example a string such as /hi/:name would match any string that matches the /hi/.* regex. The :name itself will then be available with its value from the request passed to the response function, like this:
(fn [req]
(let [name (:name (:params req))]
{:status 200
:body (str "Hi, " name)}))
:methodThe HTTP method to listen for when matching the given path.
Accepted values are:
:get:post:put:delete:head:options:patch:responseThe response can be a direct map, or a function returning a map. In case of a function, you will also get passed to you the request object. For better information on what are all the things you could do with a response, check out the http-kit documentation.
Can you improve this documentation?Edit 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 |