reitit/examples/pedestal/src/example/server.clj

64 lines
1.8 KiB
Clojure
Raw Normal View History

2018-08-31 07:01:01 +00:00
(ns example.server
2018-12-26 13:43:26 +00:00
(:require [io.pedestal.http :as server]
2018-08-31 07:56:56 +00:00
[clojure.core.async :as a]
2018-12-26 13:43:26 +00:00
[reitit.pedestal :as pedestal]
2018-09-04 14:47:52 +00:00
[muuntaja.interceptor]
2018-08-31 07:56:56 +00:00
[reitit.http :as http]
2018-08-31 07:45:51 +00:00
[reitit.ring :as ring]))
2018-08-31 07:01:01 +00:00
2018-08-31 07:45:51 +00:00
(defn interceptor [x]
2018-09-03 16:31:42 +00:00
{:enter (fn [ctx] (update-in ctx [:request :via] (fnil conj []) {:enter x}))
:leave (fn [ctx] (update-in ctx [:response :body] conj {:leave x}))})
2018-08-31 07:01:01 +00:00
2018-09-03 16:31:42 +00:00
(defn handler [{:keys [via]}]
2018-08-31 08:05:48 +00:00
{:status 200,
2018-09-03 16:31:42 +00:00
:body (conj via :handler)})
2018-08-31 08:05:48 +00:00
(def async-handler
{:enter (fn [{:keys [request] :as ctx}]
2018-09-03 16:31:42 +00:00
(a/go (assoc ctx :response (handler request))))})
2018-08-31 08:05:48 +00:00
2018-12-26 13:43:26 +00:00
(def router
2018-08-31 07:45:51 +00:00
(pedestal/routing-interceptor
2018-08-31 07:56:56 +00:00
(http/router
2018-08-31 07:45:51 +00:00
["/api"
2018-09-04 14:47:52 +00:00
{:interceptors [(interceptor :api)]}
2018-08-31 07:01:01 +00:00
2018-08-31 07:56:56 +00:00
["/sync"
2018-09-03 16:31:42 +00:00
{:interceptors [(interceptor :sync)]
:get {:interceptors [(interceptor :get)]
2018-08-31 08:05:48 +00:00
:handler handler}}]
2018-08-31 07:56:56 +00:00
["/async"
2018-09-03 16:31:42 +00:00
{:interceptors [(interceptor :async)]
:get {:interceptors [(interceptor :get) async-handler]}}]]
2018-08-31 08:11:03 +00:00
2018-08-31 08:16:36 +00:00
;; optional interceptors for all matched routes
2018-09-03 16:31:42 +00:00
{:data {:interceptors [(interceptor :router)]}})
2018-08-31 08:16:36 +00:00
2018-12-26 13:43:26 +00:00
;; optional default ring handlers (if no routes have matched)
(ring/routes
(ring/create-resource-handler)
(ring/create-default-handler))
2018-08-31 08:16:36 +00:00
;; optional top-level routes for both routes & default route
2018-09-03 16:31:42 +00:00
{:interceptors [(muuntaja.interceptor/format-interceptor)
(interceptor :top)]}))
2018-08-31 07:45:51 +00:00
2018-08-31 07:01:01 +00:00
(defn start []
2018-12-26 13:43:26 +00:00
(-> {::server/type :jetty
::server/port 3000
::server/join? false
;; no pedestal routes
::server/routes []}
(server/default-interceptors)
;; use the reitit router
(pedestal/replace-last-interceptor router)
(server/dev-interceptors)
(server/create-server)
(server/start))
2018-08-31 07:45:51 +00:00
(println "server running in port 3000"))
2018-08-31 07:01:01 +00:00
2018-08-31 07:56:56 +00:00
(comment
(start))