3

我已将数据发布到基座端点“/my-post。我已按如下方式路由该端点:

[[["/" {:get landing} ^:interceptors [(body-params/body-params) ...]
  ["/my-post {:post mypost-handler}
  ....

所以在我看来,这意味着 body-params 拦截器也会为 /my-post 触发。

在 mypost-handler 中,我有:

(defn mypost-handler
   [request]
   ****HOW TO ACCESS THEN FORM DATA HERE ****
)      

我现在如何在此处访问表单数据?我可以从打印请求中看到我有一个 #object[org.eclipse.jetty.sever.HttpInputOverHTTP..] 显然需要进一步处理才能对我有用。

(我必须说,Pedestal 的文档充其量是相当粗略的......)

4

2 回答 2

5

像这样的东西应该工作。注意 mypost-handler 路由上的 body-params 拦截器

(defn mypost-handler
  [{:keys [headers params json-params path-params] :as request}]
  ;; json-params is the posted json, so
  ;; (:name json-params) will be the value (i.e. John) of name property of the posted json {"name": "John"}
  ;; handle request 
  {:status 200
   :body "ok"})

(defroutes routes
  [[["/mypost-handler" {:post mypost-handler}
     ^:interceptors [(body-params/body-params)]
     ]
    ]])
于 2016-04-12T15:49:03.153 回答
0

mypost-handler作为一个环处理程序,即它应该接受一个环请求映射并返回一个环响应映射。因此,您可以期待一个典型的 Ring 请求结构:

(defn mypost-handler
  [{:keys [headers params json-params path-params] :as request}]
  ;; handle request
  {:status 200
   :body "ok"})

这是有关在路由表中定义此类处理程序的更多相关信息

于 2016-04-11T10:37:32.723 回答