Skip to content

Instantly share code, notes, and snippets.

@swlkr
Created February 20, 2017 02:18
Show Gist options
  • Save swlkr/2faef01f1590bfffff3a8df75bcc2d2b to your computer and use it in GitHub Desktop.
Save swlkr/2faef01f1590bfffff3a8df75bcc2d2b to your computer and use it in GitHub Desktop.
(ns monolith.server
(:require [org.httpkit.server :as http]
[clojure.tools.namespace.repl :as tn]
[ring.middleware.json :refer [wrap-json-body wrap-json-response]]
[ring.middleware.defaults :refer [wrap-defaults api-defaults]]
[monolith.env :as env]
[monolith.routes :refer [routes]]
[monolith.http :refer [response]]
[monolith.utils :refer [throw+]]
[monolith.logic.tokens :as tokens]))
(defn wrap-exceptions [handler]
(fn [request]
(try
(handler request)
(catch Exception e
(let [{:keys [status]} (ex-data e)
message (.getMessage e)]
(response (or status 500) {:message message}))))))
(def app
(-> routes
(wrap-exceptions)
(wrap-defaults api-defaults)
(wrap-json-body {:keywords? true})
(wrap-json-response)))
(defonce server (atom nil))
(defn start []
(let [opts {:port env/port}]
(reset! server (http/run-server #'app opts))))
(defn stop []
(when @server
(@server :timeout 100)
(reset! server nil)))
(defn restart []
(stop)
(tn/refresh :after 'monolith.core/start))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment