新手在这里享受Clojure 很多。所以,我有一条HTTP路由:
(POST "/login" request (post-login request))
这里,“request”是一张里面有很多http内容的地图。和“登录后”功能:
(defn post-login
;; Login into the app
[{{email "email" password "password"} :form-params session :session :as req}]
(let [user (modusers/get-user-by-email-and-password email password)]
;; If authenticated
(if-not (nil? (:user user))
(do
(assoc (response/found "/")
:session (assoc session :identity (:user user)) :flash "Bitte schön!"))
(assoc (response/found "/login") :flash "Etwas stimmt nicht mit deinem Zugriffsprozess"))))
但我不明白“请求”是如何解构的。 “电子邮件”和“密码”现在如何在函数内部提供?以及“:as req”是什么意思?这个“技术”有名字吗?
答案 0 :(得分:2)
如果评论中仍然不清楚,可以快速回答:
您的post-login
函数接收一个参数,该参数是表示HTTP请求的映射。借助特殊req
关键字,此参数存储在:as
中。
因此(defn post-login [req] ...)
和(defn post-login [{:as req}] ...)
完全相同。
地图解构的一种(一种)方式是你在右侧提供一个地图键,在左侧提供它应该被绑定的东西,例如: [{form-params :form-params :as req}]
。现在:form-params
地图中的req
键将绑定到函数体内可用的form-params
符号。
当你做"嵌套"时,事情变得更有趣解构。在您的情况下,[{{email "email" password "password"} :form-params :as req}
只意味着请求中的:form-params
键将绑定到{email "email" password "password"}
,这又是一个解构本身。最终,"email"
中的:form-params
键将绑定到email
符号,而password
则相同。:as
和以前一样,如果您需要访问整个请求(不仅仅是其中的一些参数),您可以通过
[{{:strs [email password]} :form-params session :session :as req}]
获得。
注意:您可以使用另一种语法(一种快捷方式):
879235328905006/video_insights/total_video_views/lifetime