我得到了一些参数,然后调用一个接受参数映射的函数.地图的关键名称是params的名称,如下所示:
(GET "/api/search" [nick_name gender phone max_age min_age page lmt ]
(db-search-users :nick_name nick_name :gender gender :phone phone
:max_age max_age :min_age min_age :page page :lmt lmt))
Run Code Online (Sandbox Code Playgroud)
有没有办法避免复制和粘贴?
我认为你使用的是Compojure?你不需要对参数图进行解构(Compojure中的向量是参数图上的类似{:keys [...]}解构的简写),你可以简单地将它传递给你的函数:
;; you can use a map to destructure the entire request map
(GET "/api/search" {:keys [params]}
(db-search-users (select-keys params [:nick_name ...])))
Run Code Online (Sandbox Code Playgroud)
select-keys 是可选的,虽然没有它你的功能可能最终在地图中接收意外的键.
params在传递它们之前,您可能需要考虑验证- 可能将某些值强制转换为更有用的类型db-search-users.请参阅Prismatic的架构以获得执行此操作的好方法.