2012-02-28 36 views
1

我有一個Clojure服務,我通過REST公開。我有一個頁面定義爲:Noir中的slu What允許使用哪些字符?

(defpage "/package_versions/:id" {:keys [id]} 
    (do 
    (println "ID: " id) 
    (if-let [pv (pv/fetch-one (db/keyspace) id)] 
     (response/json pv) 
     (response/status 404 nil)))) 

什麼字符被允許爲id?子彈1-2-3,1 | 2 | 3,1_2_3都可以工作,但1.2.3不會。有沒有一種方法可以製造含有的slu gs。工作?黑色路線中允許的字符是什麼?哪個代碼負責此行爲:noir,ring,compojure?

回答

1

看看Clout test cases

在測試中使用的slu do實際上並沒有特殊字符,所以我不知道哪些字符是合法的,但是在文件末尾有一個如何定義自定義路由匹配器的例子可以用來匹配點,如果你願意。

我認爲你可以通過noir.core/compojure-routenoir.core/custom-handler將自定義路由匹配器插入Noir。

另外,還有一些在其中有字面點的測試,例如, "/foo.:ext/foo.txt等URL匹配,所以如果它是一個功能,而不是一個錯誤,不允許slu dots中的點,我不會感到驚訝。

+0

所以您的權利,我也提出了這個問題的CLJ-組 https://groups.google.com/forum/?fromgroups#!topic/clj-noir/KbrxJrafUrU 他們叫我去這指南:https://github.com/weavejester/compojure/wiki/Routes-In-Detail – MrEvil 2012-02-29 03:23:01

+0

所以該文件的相關部分是:':id部分將匹配到下一個「/」的任何子路徑或「」'。它還規定,你可以指定你的自定義正則表達式來匹配內聯的子路徑匹配,例如'在Noir的情況下(defpage [「/ user /:id」,:id#「[0-9] +」] ...)'' – liwp 2012-02-29 10:22:00

0

它應該是clout負責這個,這是Compojure使用的庫。您可以看看wakeful以查看設置不同匹配器的一個示例,特別是使用route-compile

相關問題