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

at.*_*at. 5 clojure compojure ring

根据路线上的Compojure文档,我可以轻松获得如下的单个参数:

(POST "/my-app" [param1 param2]
  (str "<h1>Hello " param1 " and " param2 "</h1>"))
Run Code Online (Sandbox Code Playgroud)

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

Tim*_*mur 7

compojure处理程序接收整个请求映射作为其参数,因此处理程序还可以访问所有参数.例如,要查看整个请求:

(POST "/" request
    (str request))
Run Code Online (Sandbox Code Playgroud)

或者,提取所有表单参数:

(POST "/" request
    (str (:form-params request)))
Run Code Online (Sandbox Code Playgroud)

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

(POST "/" [param1 param2 :as request]
        (str (:form-params request)))
Run Code Online (Sandbox Code Playgroud)

或者,提取命名和所有"附加"参数:

(POST "/" [param1 param2 & more-params]
        (str more-params))
Run Code Online (Sandbox Code Playgroud)