2012-02-28 35 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

相关问题