如何使用Compojure获取POST请求的所有参数

7
根据Compojure路由文档,我可以轻松地获取单个参数,如下所示:
(POST "/my-app" [param1 param2]
  (str "<h1>Hello " param1 " and " param2 "</h1>"))

如何获取所有参数,而不仅仅是单个参数?

3个回答

10

Compojure处理程序接收整个请求映射作为它们的参数,因此处理程序也可以访问所有参数。例如,要查看整个请求:

(POST "/" request
    (str request))

或者,提取所有表单参数:
(POST "/" request
    (str (:form-params request)))

问题中使用的语法是特定于compojure的解构语法,它允许从请求中提取单个参数。这类似于clojure的常规解构语法,并且与常规解构一样,compojure的解构也允许混合解构并仍然获取整个请求:

(POST "/" [param1 param2 :as request]
        (str (:form-params request)))

或者,提取命名和所有“附加”参数:
(POST "/" [param1 param2 & more-params]
        (str more-params))

4

我猜测把& params放入向量中即可解决问题:

(POST "/my-app" [& params]
  (str "<h1>Hello " params "</h1>"))

0

类似这样返回所有参数:

(POST "/test" {params :params} 
    (str "POST params=" params))

使用这种表示法来访问特定参数:
(println (params :Nom))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接