Compojure: как отобразить параметры запроса
Я пытаюсь сделать любое из следующих сопоставлений для отображения http://mysite.org/add?http://sitetoadd.com
или http://mysite.org/add?u=http://sitetoadd.com
(GET "/add?:url" [url] url)
(GET "/add?u=:url" [url] url)
(GET "/add" {params :params} (params :u))
(GET "/add" {params :params} (params "u"))
(GET "/add" [u] u)
Но это просто терпит неудачу, и я не знаю почему. С другой стороны, это работает:
(GET "/add/:url" [url] url)
но я не могу использовать его, потому что мне нужно передать URL-адрес, а http://mysite.org/add/http://sitetoadd.com
является недопустимым, а http://mysite.org/add?http://sitetoadd.com is
ok.
EDIT: демпинг request
Я видел, что params пуст. Я думал, что он будет содержать POST и параметры GET, но единственное место, где я могу найти параметры, которые я передаю, находится в : строка запроса ( "u = asd" ), Он кажется, что для анализа строк запроса требуется промежуточное программное обеспечение. Кстати, мой вопрос стоит на месте.
Ответы
Ответ 1
См. https://github.com/weavejester/compojure в разделе "Нарушение изменений". По умолчанию карта params больше не привязана. Если у вас есть пример маршрутов внутри "(defroutes main-routes...)", убедитесь, что вы активируете его через "(маршруты-обработчики/основные маршруты" ), как описано в https://github.com/weavejester/compojure/wiki/Getting-Started, так как это метод сайта или api, который гарантирует привязку карты params по умолчанию.
Вот пример, который работает:
(ns hello-world
(:use compojure.core, ring.adapter.jetty)
(:require [compojure.route :as route]
[compojure.handler :as handler]))
(defroutes main-routes
(GET "/" {params :params} (str "<h1>Hello World</h1>" (pr-str params)))
(route/not-found "<h1>Page not found</h1>"))
(defn -main [& m]
(run-jetty (handler/site main-routes) {:port 8080}))