【发布时间】:2012-09-01 23:18:48
【问题描述】:
我正在尝试更深入地研究 ring 并使用以下代码来查看请求映射中发生了什么:
(需要'[ring.adapter.jetty :as serv]) (需要'[ring.middleware.params :as wp]) (定义基本处理程序 [参数] {:代码 200 :输入“txt/html” :body (str 参数)}) (defn wp-handler [参数] ((wp/wrap-params base-handler) params)) (serv/run-jetty #'wp-handler {:port 8099})当我想查看请求映射上的get 查询数据时,它就在那里。假设我在浏览器中输入http://localhost:8099/api/tasks/remove?hello=3,响应看起来像这样:
您可以看到“hello=3”在查询字符串中。
但是对于post,响应有:content-type "application/x-www-form-urlencoded",整个响应看起来像下面这个例子,我没有看到任何表单参数:
我的问题分为两部分:
- 提交表单时,ring 或 jetty 到底在做什么?
- 如果我正在尝试编写自己的
handler来处理表单数据,我如何访问表单查询参数的简化代码框架是什么?
我已经在params.clj 中隔离了这个函数的“魔力”:
(defn- assoc-form-params
"Parse and assoc parameters from the request body with the request."
[request encoding]
(merge-with merge request
(if-let [body (and (urlencoded-form? request) (:body request))]
(let [params (parse-params (slurp body :encoding encoding) encoding)]
{:form-params params, :params params})
{:form-params {}, :params {}})))
尤其是这一行:
(parse-params (slurp body :encoding encoding) encoding)
但不确定它在做什么。
【问题讨论】: