Clojure 在嵌套的Compojure路由中使用空路径参数

Clojure 在嵌套的Compojure路由中使用空路径参数,clojure,compojure,Clojure,Compojure,如何在Compojure嵌套上下文中匹配URL而不使用尾随空格 我试图解决的问题: 我想匹配以下路线: /users/ /users/:user-id /users/:user-id/resources/ 首先访问所有用户, 其次,对于单个用户实体, 给定用户的所有资源的最后一个 使用以下defroutes功能: (解除路由) (获取“/用户/”…) (获取“/users/:用户id”…) (获取“/users/:用户id/resources/”) 然而,随着API的发展,我希望使用上下文来

如何在Compojure嵌套上下文中匹配URL而不使用尾随空格

我试图解决的问题:

我想匹配以下路线:

/users/
/users/:user-id
/users/:user-id/resources/
首先访问所有用户, 其次,对于单个用户实体, 给定用户的所有资源的最后一个

使用以下
defroutes
功能:

(解除路由)
(获取“/用户/”…)
(获取“/users/:用户id”…)
(获取“/users/:用户id/resources/”)
然而,随着API的发展,我希望使用上下文来澄清代码

(解除路由)
(上下文“/用户”
(用户路由);;所有用户操作
(上下文“/:用户id”[用户id]
(用户路由用户id);;所有每个用户操作
(上下文“/资源”[]
(资源路由用户id((())));;所有用户资源操作
这意味着
用户路由
应该如下所示:

(defn用户路由[用户id]
(路线)
(获取“”[uid]…))
这在编译时给出:

clojure.lang.ExceptionInfo:路由字符串中的分析错误
数据:{:失败
{:索引0,
:理由
[{:tag:regexp,:应为#“(https?:)?/”}
{:tag:string,:应为“:”}
{:tag:string,:应为“*”}
{:tag:regexp,:应为“\\.”
{:tag:regexp,:应为#“(:[^\p{L}{*{}\\].[^::{}\\])+“}],
:第1行,
:第1栏,
:text nil}
clojure.lang.Compiler$CompilerException:clojure.lang.ExceptionInfo:路由字符串中的分析错误{:失败第1行第1列的分析错误:
无
^
预期会出现以下情况之一:
#“(https?:)?/”
":"
"*"
#"\\."
#“(:[^\p{L}{u*{}\\].[^:{}\\]])+”
},编译:(/Users/laurent/dev/suritate/web/src/web/routes/api.clj:134:5)
我相信这是由于解析URL的方式(使用)造成的,因此我提出了问题


在Compojure嵌套上下文中,匹配URL而不使用尾随空格的正确方法是什么?

您是否尝试过
(defn user routes[user id](GET”/“[uid]”…)…
?是的,它可以工作,但我正在使用的REST API不是这样的。我想清楚地区分实体和“文件夹”。一个是可以检索的对象,另一个是可以扫描的集合。你解决过这个问题吗?同样的问题!