列出 compojure 中的所有路由

nan*_*uko 5 clojure compojure

如何列出处理函数上的所有路由?我正在寻找类似于 Rails' 的行为rake routes。例如:

(defroutes foo-routes
    (GET "/foo/:foo-id"
        [foo-id]
            "bar response")
    (GET "/bar/:bar-id"
        [bar-id]
            "foo response"))
Run Code Online (Sandbox Code Playgroud)

那么是否可以从 foo-bar-routes 中提取包含以下内容的地图?

{:GET "/foo/:foo-id"
 :GET "/bar/:bar-id"}
Run Code Online (Sandbox Code Playgroud)

Vik*_* K. 3

我认为这是不可能的。defroutes是一个返回环处理程序的宏。GET是一个返回路由的宏。路由又只是一个函数,仅当方法和路径匹配时才调用相关处理程序。所以最终你的 foo-routes 只是一个 clojure 函数,由你的路由定义的其他函数组成,并且它不维护这样的映射。如果您需要获取这样的地图,也许您可​​以自己在代码中维护它并从该地图生成路线。