This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2018-01-07
Channels
- # adventofcode (4)
- # aleph (1)
- # architecture (9)
- # beginners (67)
- # boot (7)
- # boot-dev (12)
- # cider (3)
- # clojure (166)
- # clojure-austin (3)
- # clojure-estonia (1)
- # clojure-greece (2)
- # clojure-russia (5)
- # clojure-spec (1)
- # clojure-uk (4)
- # clojurescript (19)
- # cursive (1)
- # data-science (5)
- # datascript (4)
- # datomic (3)
- # docs (10)
- # emacs (24)
- # events (4)
- # fulcro (16)
- # graphql (8)
- # hoplon (2)
- # jobs-discuss (1)
- # leiningen (5)
- # off-topic (2)
- # planck (30)
- # re-frame (20)
- # reagent (36)
- # ring (3)
- # shadow-cljs (5)
- # spacemacs (1)
- # specter (2)
Hi. Can anybody point me to a good example for understanding async Ring handlers and middleware? Esp raising exceptions.
In the middleware, do I need to catch any exceptions and call (raise thrown)
?
For example, in the middleware below:
(defn ping-middleware
([handler]
(ping-middleware handler #{"/ping" "/ping/"}))
([handler ping-uris]
(ping-middleware handler ping-uris (constantly "pong")))
([handler ping-uris body-generator]
(let [ping-uris-set (set ping-uris)
ping-response (fn [] {:status 200
:body (body-generator)
:headers {"Content-Type" "text/plain"
"Cache-Control" "no-store, no-cache, must-revalidate"}})]
(fn
([request]
(if (->> (:uri request)
(contains? ping-uris-set))
(ping-response)
(handler request)))
([request respond raise]
(if (->> (:uri request)
(contains? ping-uris-set))
(respond (ping-response))
(handler request respond raise)))))))