2014-01-16 41 views
1

我有以下的Compojure路線:中間件和解構的Compojure語法

(defroutes my-handler 
    (GET "/:my-model-id" [id] (render-my-model (parse-int id)))) 

不幸的是,對於我這種定義方式的每路線,我必須手動添加調用解析傳入整數。

我創建了Ring中間件,它可以通過任何form-paramsrequest-params進行爬取,並解析任何看起來可能是整數的東西。但是,此中間件不適用於自定義Compojure路由。

有沒有人知道我可以如何讓Compojure自動處理整數解析?我能以某種方式將它與我現有的中間件連接起來嗎?

+0

你能提供的中間件代碼? – ponzao

回答

1

不幸的是,compojure會在解析PARAM後直接調用從路由定義中生成的函數。

AFAIC之間得到的唯一途徑,以改變compojures代碼庫直接或者對assoc-route-params使用胡克(由technomancy)在https://github.com/weavejester/compojure/blob/master/src/compojure/core.clj#L30

+0

謝謝。我剛剛意識到有一個路徑參數字段;我將嘗試編寫一些自定義中間件來改變它。 – skatenerd

+0

問題的關鍵在於你不能在Compojures解析器和你的處理器之間進行切換,除非你使用'make-route'這樣的函數來允許你提供一個處理器/函數/。然後,你可以在你的中間件上面壓縮你的中間件。 G。在一個循環中。儘管如此,這不會讓你使用Compojures的摧毀魔法。如果我對我的斷言沒有錯,我認爲這是圖書館顯然缺少的功能,因爲你可以e。 G。指示它只解析小數(通過使用帶有正則表達式的矢量用於路由字符串),它應該爲類型轉換提供便利的方法。 –