3JOH.JEEMFXBSFͷجૅ-JTQ.FFU6QQSFTFOUFECZ4IJCVZBMJTQ[email protected]@Q$ZCP[V4UBSUVQT *OD
View Slide
͋ͽʔ[email protected]@Q$ZCP[V4UBSUVQT *OD+BQBO$MPKVSJBOT "ENJO
3JOHͷίϯηϓτHandlerRequest ResponseMiddlewareࠓ.JEEMFXBSFͷ͓
3JOH.JEEMFXBSF
3JOH.JEEMFXBSF(defn wrap-member [handler](fn [req](->> (get-in req [:params :member-id])find-member(assoc req :member)handler)))ߴ֊ؔϋϯυϥΛड͚औΔϦΫΤετΛऔΔؔΛฦ͢ ৽͍͠ϋϯυϥ
(defn wrap-member [handler](fn [req](->> (get-in req [:params :member-id])find-member(assoc req :member)handler)))3JOH.JEEMFXBSFߴ֊ؔϋϯυϥΛड͚औΔϦΫΤετΛऔΔؔΛฦ͢ ৽͍͠ϋϯυϥϋϯυϥϦΫΤετؔ
.JEEMFXBSFΛద༻͢Δ(defn wrap-answer [handler](fn [req](handler (assoc req :ans 42))))(defn handler [req](res/response (get req :ans)))XSBQBOTXFSϛυϧΣΞΛIBOEMFSద༻͢Δ(def app(wrap-answer handler))
.JEEMFXBSFΛద༻͢Δ(let [handler (fn [req] (res/response (get req :ans))](fn [req](handler (assoc req :ans 42))))XSBQBOTXFSϛυϧΣΞΛIBOEMFSద༻͢Δ(fn [req](res/response (get (assoc req :ans 42) :ans)))
ϦΫΤετͷྲྀΕHandlerMiddleware AMiddleware BMiddleware CRequestResponse
ϦΫΤετͷྲྀΕHandlerMiddleware AMiddleware BMiddleware CRequestResponse.JEEMFXBSF$͕ϦΫΤετϚοϓΛॲཧ͠৽ͨͳϦΫΤετϚοϓΛ࣍ͷϋϯυϥ͢
ϦΫΤετͷྲྀΕHandlerMiddleware AMiddleware BMiddleware CRequestResponse.JEEMFXBSF#͕ϦΫΤετϚοϓΛॲཧ͠৽ͨͳϦΫΤετϚοϓΛ࣍ͷϋϯυϥ͢
ϦΫΤετͷྲྀΕHandlerMiddleware AMiddleware BMiddleware CRequestResponse.JEEMFXBSF"͕ϦΫΤετϚοϓΛॲཧ͠৽ͨͳϦΫΤετϚοϓΛ࣍ͷϋϯυϥ͢
ϦΫΤετͷྲྀΕHandlerMiddleware AMiddleware BMiddleware CRequestResponse)BOEMFS͕ϦΫΤετϚοϓΛॲཧ͠ϨεϙϯεϚοϓΛੜฦ٫͢Δ
ϦΫΤετͷྲྀΕHandlerMiddleware AMiddleware BMiddleware CRequestResponse.JEEMFXBSF"͕ϨεϙϯεϚοϓΛॲཧ͠৽ͨͳϨεϙϯεϚοϓΛฦ٫͢Δ
ϦΫΤετͷྲྀΕHandlerMiddleware AMiddleware BMiddleware CRequestResponse.JEEMFXBSF#͕ϨεϙϯεϚοϓΛॲཧ͠৽ͨͳϨεϙϯεϚοϓΛฦ٫͢Δ
ϦΫΤετͷྲྀΕHandlerMiddleware AMiddleware BMiddleware CRequestResponse.JEEMFXBSF$͕ϨεϙϯεϚοϓΛॲཧ͠৽ͨͳϨεϙϯεϚοϓΛฦ٫͢Δ
ϛυϧΣΞͲͷΑ͏ʹಇ͔͘ઌʹద༻ͨ͠ϛυϧΣΞ͕ଆʹͳΔ֎ଆͷϛυϧΣΞ͕ઌʹϦΫΤετϚοϓΛ ॲཧͰ͖ΔଆͷϛυϧΣΞ͕ઌʹϨεϙϯεϚοϓΛ ॲཧͰ͖Δ
3JOH.JEEMFXBSF࣮ύλʔϯ
࣮ύλʔϯϦΫΤετϚοϓߋ৽ύλʔϯϨεϙϯεϚοϓߋ৽ύλʔϯ݅ذύλʔϯΫϩʔδϟ ดแύλʔϯ
ϦΫΤετϚοϓߋ৽ύλʔϯ(defn wrap-member [handler](fn [req](->> (get-in req [:params :member-id])find-member(assoc req :member)handler)))ϦΫΤετϚοϓΛߋ৽ͯ͠ϋϯυϥ͢Ұൠతʹϋϯυϥ͢લͷڞ௨ॲཧΛ୲͏ϦΫΤετϚοϓʹՃ
(defn wrap-html [handler](fn [req](-> (handler req)(res/content-type "text/html"))))ϨεϙϯεϚοϓߋ৽ύλʔϯϋϯυϥͷฦ٫ͨ͠ϨεϙϯεϚοϓΛߋ৽͢ΔϨεϙϯεͷ.*.&λΠϓΛ ౷Ұͨ͠Γ͢ΔͷʹศརϨεϙϯεϚοϓʹՃ
(defn wrap-auth [handler](fn [req](if (authenticated? req)(handler req)(auth-error-handler req))))݅ذύλʔϯ࣮ߦ͢ΔϋϯυϥΛ݅ʹΑͬͯมߋ͢ΔϧʔςΟϯάೝূೝՄͷॲཧΛ͢Δ ڞ௨ॲཧͰར༻͞ΕΔ݅Ͱ࣮ߦରΛมߋ
(defn wrap-fib [handler](let [memoized-fib (memoize fib)](fn [req](let [n (->long (get-in req [:params :n]))](-> (assoc req :fib-num (memoized-fib n))handler)))))Ϋϩʔδϟ ดแύλʔϯڥΛด͡ࠐΊͯ৽͍͠ϋϯυϥΛฦ٫͢Δॏ͍ॲཧͳͲΛϝϞԽͨ͠ΓɺԿܭࢉ͢Δҙຯ͕ͳ͍ͷΛด͡ࠐΊͯ͠·͑Δฦ٫͢Δؔʹด͡ࠐΊΔ
ى͜Γ͕ͪͳ
(defn show-user [req](let [user-id (get-in req [:params :user-id])db (:db req)(-> (find-user-by-id db user-id)res/ok res/html)))
ڊେͳϦΫΤετϚοϓϛυϧΣΞΛཔΓ͗ͯ͢ؾ͕͍ͨΒ ϦΫΤετϚοϓ͕େ͖͘ͳΓ͍͗ͯ͢Δ(defn show-user [req](let [user-id (get-in req [:params :user-id])db (:db req)(-> (find-user-by-id db user-id)res/ok res/html)))
શͯݟ͑ͯ͠·͏ϛυϧΣΞͰϦΫΤετϚοϓʹӨڹΛ༩͑Εશͯͷϋϯυϥ͔Βத͕ݟ͑ͯ͠·͏(defn show-user [req](let [user-id (get-in req [:params :user-id])db (:db req)(-> (find-user-by-id db user-id)res/ok res/html)))
(def app(-> handlerwrap-keyword-paramswrap-nested-paramswrap-multipart-paramswrap-params))
ӅΕͨґଘؔखಈͰॱ൪Λܾఆ͠ͳ͚ΕͳΒͳ͍ґଘؔͷଘࡏ͕ʹݟ͑ͳ͍(def app(-> handlerwrap-keyword-paramswrap-nested-paramswrap-multipart-paramswrap-params))ґଘ͕ؔੜ·Ε͍ͯΔ
·ͱΊ
·ͱΊ3JOH.JEEMFXBSF୯७ͳߴ֊ؔΈ୯७͚ͩͲڧྗطʹ࠶ར༻ՄೳͳϥΠϒϥϦ͕ࢁ͋Δͨͩ͠ɺཚ༻͢ΔͱԿॲ͔ΒԿ͕ೖ͖͍ͬͯͯΔͷ͔͔Βͳ͘ͳΔͷͰରࡦ͕ඞཁ