我有一个Clojure服务,我通过REST公开。我有一个页面定义为:
(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允许哪些字符? slu 1-2 1-2-3,1 | 2 | 3,1_2_3都有效,但1.2.3没有。有没有办法制作含有的slu ..工作?黑色路线允许的角色是什么?哪种代码对此行为负责:noir,ring,compojure?
答案 0 :(得分:1)
测试中使用的slus中并没有真正的特殊字符,所以我不知道哪些字符是合法的,但是在文件的末尾有一个如何定义自定义路由匹配器的示例,大概可以如果你愿意,可以用来匹配点。
我希望您可以使用noir.core/compojure-route
或noir.core/custom-handler
将自定义路由匹配器插入Noir。
此外,还有测试中包含字面点,例如: "/foo.:ext
匹配/foo.txt
等网址,因此如果不允许使用slug中的点,我不会感到惊讶。
答案 1 :(得分:0)
应该{{3}}对此负责,这是Compojure使用的库。您可以查看clout
,查看设置不同匹配器的示例,尤其是使用route-compile
。