Size: a a a

Clojure — русскоговорящее сообщество

2020 January 28

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Сергей Суржик
и я могу сделать один мидлварь with-response, чтобы не плодить одинаковые хешмапы respons'a
непонятно, но не думаю
щас напишу, как ты можешь сделать
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
Sergey Trofimov
непонятно, но не думаю
щас напишу, как ты можешь сделать
допустим home-handler вернет просто разметку html и статус код, а мидлаврь with-response обернет это дело в хешмапу ответа
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Сергей Суржик
и я могу сделать один мидлварь with-response, чтобы не плодить одинаковые хешмапы respons'a
(defn about-handler [req]
 {:body "About page"})

(defn home-handler [req]
 {:body "Home page"})

(defn routing-handler [req]
 (let [response (case (:uri req)
                  "/" (home-handler req)
                  "/about" (about-handler req))]
   (merge {:status 200
           :headers {"Content-Type" "text/plain"}}
     response)))

(def app
 (-> routing-handler
   wrap-reload))
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
(let [response

вот-вот. я об этом и гвоорю. секунду
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
Сергей Суржик
есть небольшой вопрос: при создании приложения на clojure (http простой роутинг на case), какая роль должна отводится хендлеру (обработчику), который принимает request
Надо считать параметры и отдать мапу, где есть статус, боди и хедеры.
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
Сергей Суржик
это я читал. пытаюсь до конца понять.
и где здесь должен фигурировать "роутер"?
Роутер, это когда ты по uri хочешь понять какому обработчику отдавать и через какие милдвары.
источник

MP

Maxim Penzin in Clojure — русскоговорящее сообщество
.... Тут уже все разжевали на сто рядов, а я сижу на пляже и с телефона комменнтирую :)
источник

AI

Andrey Ivanov in Clojure — русскоговорящее сообщество
По мидлварям кстати у Вани Гришаева в блоге есть хорошая статья
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Сергей Суржик
(let [response

вот-вот. я об этом и гвоорю. секунду
Немного по другому routing-handler

(defn about-handler [req]
 {:body "About page"})

(defn home-handler [req]
 {:body "Home page"})

(defn routing-handler [req]
 (let [handler (case (:uri req)
                 "/" home-handler
                 "/about" about-handler)]
   (merge {:status 200
           :headers {"Content-Type" "text/plain"}}
     (handler response))))

(def app
 (-> routing-handler
   wrap-reload))
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
Sergey Trofimov
Немного по другому routing-handler

(defn about-handler [req]
 {:body "About page"})

(defn home-handler [req]
 {:body "Home page"})

(defn routing-handler [req]
 (let [handler (case (:uri req)
                 "/" home-handler
                 "/about" about-handler)]
   (merge {:status 200
           :headers {"Content-Type" "text/plain"}}
     (handler response))))

(def app
 (-> routing-handler
   wrap-reload))
ты имел ввиду  (handler req) а не (handler response)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Сергей Суржик
ты имел ввиду  (handler req) а не (handler response)
да
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Сергей Суржик
ты имел ввиду  (handler req) а не (handler response)
ну или мапой, как выше предлагали

(defn about-handler [req]
 {:body "About page"})

(defn home-handler [req]
 {:body "Home page"})

(def routing-map {"/" home-handler
                 "/about" about-handler})

(defn routing-handler [req]
 (let [handler (routing-map (:uri req))]
   (merge {:status 200
           :headers {"Content-Type" "text/plain"}}
     (handler req))))

(def app
 (-> routing-handler
   wrap-reload))
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
значит routing-handler это уже окончательный хандлер который формирует хешмапу ответа
где тогда должны обрабатываться и как должны передаваться в этот routing-handler другие статусы ответов и headers?)
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Сергей Суржик
значит routing-handler это уже окончательный хандлер который формирует хешмапу ответа
где тогда должны обрабатываться и как должны передаваться в этот routing-handler другие статусы ответов и headers?)
«значит routing-handler это уже окончательный хандлер который формирует хешмапу ответа» ну, мидлварь может поменять ответ
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
(def routing-map {"/" (home-handler  200 "text/html")
                 "/about" (about-handler  200 "text/html")})
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Сергей Суржик
значит routing-handler это уже окончательный хандлер который формирует хешмапу ответа
где тогда должны обрабатываться и как должны передаваться в этот routing-handler другие статусы ответов и headers?)
«где тогда должны обрабатываться и как должны передаваться в этот routing-handler другие статусы ответов и headers?» то, как написано сейчас — в about-handler ты можешь задать любые поля в ответе
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
зачем из about -handler'a передавать hashmap? а если я хочу просто вернуть hiccup-разметку.
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
по сути я возвращаю допустим только :body
источник

ST

Sergey Trofimov in Clojure — русскоговорящее сообщество
Сергей Суржик
(def routing-map {"/" (home-handler  200 "text/html")
                 "/about" (about-handler  200 "text/html")})
нет
(def routing-map {"/" {:handler home-handler :content-type "text/html"}
                 "/about" {:handler about-handler}})
источник

СС

Сергей Суржик in Clojure — русскоговорящее сообщество
а точно!
источник