Compojure 绑定来自 URL 的 HTTP 请求参数,但不绑定来自 POST 表单的 HTTP 请求参数

发布于 2024-09-26 14:31:14 字数 376 浏览 10 评论 0原文

Compojure 不绑定 POST 表单中的字段。这是我的路线定义:

(defroutes main-routes
  (POST "/query" {params :params}
    (debug (str "|" params "|"))
    "OK...")
)

当我发布包含字段的表单时,我得到 |{}|,即没有参数。顺便说一句,当我去 http://localhost/query?param1=value1 时,params 不为空,并且这些值会打印在服务器控制台上。

表单字段还有其他绑定吗?

Compojure does not bind the fields in a POST form. This is my route def:

(defroutes main-routes
  (POST "/query" {params :params}
    (debug (str "|" params "|"))
    "OK...")
)

When I post a form with fields in it, I get |{}|, i.e. there are no parameters. Incidentally, when I go http://localhost/query?param1=value1, params is not empty, and the values get printed on the server console.

Is there another binding for form fields??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

云胡 2024-10-03 14:31:14

确保您的输入字段具有 name="zzz" 属性,但不仅仅是 id="zzz"。

html 表单收集所有输入并使用名称属性

my_post.html

<form action="my_post_route" method="post">
    <label for="id">id</label> <input type="text" name="id" id="id" />
    <label for="aaaa">aaa</label> <input type="text" name="aaa" id="aaa" />
    <button type="submit">send</button>
</form>

my_routes.clj

(defroutes default-handler
  ;,,,,
  (POST "/my_post_route" {params :params} 
    (str "POST id=" (params "id") " params=" params))
  ;,,,,

发布它们,产生如下响应

id=21 params={"aaa" "aoeu", "id" "21"}

ensure you have input fields with name="zzz" attribute, but not only id="zzz".

html form collects all inputs and posts them using the name attribute

my_post.html

<form action="my_post_route" method="post">
    <label for="id">id</label> <input type="text" name="id" id="id" />
    <label for="aaaa">aaa</label> <input type="text" name="aaa" id="aaa" />
    <button type="submit">send</button>
</form>

my_routes.clj

(defroutes default-handler
  ;,,,,
  (POST "/my_post_route" {params :params} 
    (str "POST id=" (params "id") " params=" params))
  ;,,,,

produce response like

id=21 params={"aaa" "aoeu", "id" "21"}

天煞孤星 2024-10-03 14:31:14

这是如何处理参数的一个很好的示例

(ns example2
  (:use [ring.adapter.jetty             :only [run-jetty]]
    [compojure.core                 :only [defroutes GET POST]]
    [ring.middleware.params         :only [wrap-params]]))

(defroutes routes
  (POST "/" [name] (str "Thanks " name))
  (GET  "/" [] "<form method='post' action='/'> What's your name? <input type='text' name='name' /><input type='submit' /></form>"))

(def app (wrap-params routes))

(run-jetty app {:port 8080})

https://github.com/heow/compojure-cookies -example

请参见示例 2 - 中间件是功能

This is a great example of how to handle parameters

(ns example2
  (:use [ring.adapter.jetty             :only [run-jetty]]
    [compojure.core                 :only [defroutes GET POST]]
    [ring.middleware.params         :only [wrap-params]]))

(defroutes routes
  (POST "/" [name] (str "Thanks " name))
  (GET  "/" [] "<form method='post' action='/'> What's your name? <input type='text' name='name' /><input type='submit' /></form>"))

(def app (wrap-params routes))

(run-jetty app {:port 8080})

https://github.com/heow/compojure-cookies-example

See under Example 2 - Middleware is Features

半枫 2024-10-03 14:31:14

笔记:
(params "id") 对我返回 nil,我使用 (params :id) 得到正确的值

note:
(params "id") return nil for me, i get a correct value with (params :id)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文