2014-10-01 40 views
3

在我的網絡處理器PARAMS,我有以下定義:ring.middleware和的Compojure:關鍵字

(:require ... 

[ring.middleware.cookies :refer [wrap-cookies]] 
      [ring.middleware.multipart-params :refer [wrap-multipart-params]] 
      [ring.middleware.params :refer [wrap-params]] 
      [ring.middleware.keyword-params :refer [wrap-keyword-params]] 
      [ring.middleware.content-type :refer [wrap-content-type]] 
      [ring.middleware.format-response :refer [wrap-restful-response] 
...) 

(def app 
    (-> (routes home/my-routes) 
     (wrap-cookies) 
     (wrap-params) 
     (wrap-multipart-params) 
     (wrap-keyword-params)))) 

一切正常。使用類似「../test?foo=123」的URL進行curl測試會得到一個類似{:foo 123}的params地圖。但是,顯示爲關鍵字的實際上是一個字符串:(keyword?:foo)返回false。

我試着重新安排處理程序,一次刪除它們,但無濟於事。是否有關於將關鍵字轉換回字符串的compojure?由於

+0

您是不是要找:'(關鍵字? 「:富」)'? – Jeremy 2014-10-01 22:59:49

+0

No:我這樣做了:(println「is keyword」(keyword?(key(first params)))) – pickwick 2014-10-02 13:17:57

回答

5

wrap-keyword-params中間件應該wrap-paramswrap-multipart-params後運行,使您的應用程序應該是這樣的:

(def app 
    (-> (routes home/my-routes) 
     (wrap-keyword-params) 
     (wrap-cookies) 
     (wrap-params) 
     (wrap-multipart-params)))) 
+0

爲了避免將來出現類似的問題,你可以考慮使用https://github.com/ring-clojure/環默認 – Chris 2014-10-03 02:13:29