4

私のコード:

(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})))

ファイルをreplにロードしてこのコマンドを実行すると、paramsが空白のようです:

$ (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\":{}}"}

私は何を間違っていますか?クエリ文字列を取得する必要がありますが、params マップは常に空です..

4

1 に答える 1

5

クエリ文字列を解析してparamsマップに取り込むには、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
      ))

var(#'checkin-app-routes)の使用は厳密には必要ではありませんが、ルートを再定義するときに、ミドルウェア内にラップされたルートを閉じ、変更を取得することに注意してください。

IOWあなたも書くことができます

(def checkin-app-handler
  (-> checkin-app-routes
      rmp/wrap-params
      ; .. other middlewares
      ))

ただし、ルートをインタラクティブに再定義する場合は、ハンドラーも再定義する必要があります。

于 2011-07-31T10:35:31.060 に答える