Add the handler factories for index and article pages.

main
KKlochko 1 year ago
parent bfef190c91
commit 46f017d716

@ -0,0 +1,42 @@
(ns blog.handlers
(:require [cljs.core.async :refer [go, take!, put!, <!, >!, chan]]
[cljs.core.async.interop :refer-macros [<p!]]
[blog.db :as db]))
(defn index-page-handler-factory
[client]
(fn [req res]
(let [channel (chan)
id (.-id (.-params req))]
(go
(try
(let [articles (<! (db/get-articles client channel))]
(res/status 200)
(.render res "index"
(-> {:articles articles}
(cljs.core/clj->js))))
(catch js/Error err
(res/status 500)
(res/send (ex-message err))))))))
(defn htmx-get-article-handler-factory
[client]
(fn [req res]
(let [channel (chan)
id (.-id (.-params req))]
(go
(try
(let [article (<! (db/get-article client id channel))]
(if (empty? article)
(do
(res/status 404)
(res/send (ex-message "404")))
(do
(res/status 200)
(.render res "article_briefly"
(-> {:article article :layout false}
(cljs.core/clj->js))))))
(catch js/Error err
(res/status 500)
(res/send (ex-message err))))))))

@ -2,7 +2,8 @@
(:require ["express" :as express] (:require ["express" :as express]
["express-handlebars" :refer [engine]] ["express-handlebars" :refer [engine]]
[blog.db :as db] [blog.db :as db]
[blog.env :as env])) [blog.env :as env]
[blog.handlers :as handlers]))
(def app (express)) (def app (express))
(def port (env/get-port)) (def port (env/get-port))
@ -28,8 +29,12 @@
"Sets the routes for server." "Sets the routes for server."
[] []
(. app get "/" (. app get "/"
(handlers/index-page-handler-factory client))
(fn [req res] (fn [req res]
(. res send "Hello world"))))
(. app get "/htmx/articles/:id"
(handlers/htmx-get-article-handler-factory client))
)
(defn start (defn start
"Starts server." "Starts server."

Loading…
Cancel
Save