Compojure связывает параметры HTTP-запроса с URL, но не с формой POST
Compojure не связывает поля в почтовой форме. Это мой маршрут def:
(defroutes main-routes
(POST "/query" {params :params}
(debug (str "|" params "|"))
"OK...")
)
Когда я размещаю форму с полями в ней, я получаю | {}|, т. е. параметров нет. Кстати, когда я пойду http://localhost/query?param1=value1 , params не пуст, и значения печатаются на консоли сервера.
Существует ли другая привязка для полей формы??
2 ответа:
Убедитесь, что у вас есть поля ввода с атрибутом name="zzz", а не только id="zzz".
Html-форма собирает все входные данные и публикует их, используя атрибут name
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"}
Это отличный пример того, как обрабатывать параметры
(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-Middleware is Features