clojure - Compojure Routes que pierde la información de los params
get query-string (1)
Para obtener la cadena de consulta analizada en el mapa de parámetros, debe usar el middleware de params:
(ns n
(:require [ring.middleware.params :as rmp]))
(defroutes checkin-app-routes
(GET "" [] ...))
(def checkin-app-handler
(-> #''checkin-app-routes
rmp/wrap-params
; .. other middlewares
))
Tenga en cuenta que el uso de var ( #''checkin-app-routes
) no es estrictamente necesario, pero hace que las rutas se cierren, envueltas en los middlewares, recojan los cambios cuando se redefinen las rutas.
IOW también puedes escribir
(def checkin-app-handler
(-> checkin-app-routes
rmp/wrap-params
; .. other middlewares
))
pero también debe redefinir el controlador al redefinir de forma interactiva las rutas.
Mi código:
(defn json-response [data & [status]]
{:status (or status 200)
:headers {"Content-Type" "application/json"}
:body (json/generate-string data)})
(defroutes checkin-app-handler
(GET "/:code" [code & more] (json-response {"code" code "params" more})))
Cuando cargo el archivo en la réplica y ejecuto este comando, el parámetro parece estar en blanco:
$ (checkin-app-handler {:server-port 8080 :server-name "127.0.0.1" :remote-addr "127.0.0.1" :uri "/123" :query-string "foo=1&bar=2" :scheme :http :headers {} :request-method :get})
> {:status 200, :headers {"Content-Type" "application/json"}, :body "{/"code/":/"123/",/"params/":{}}"}
¿Qué estoy haciendo mal? Necesito llegar a la cadena de consulta, pero el mapa de parámetros está siempre vacío.