The path string expected by clout
as the first argument to route-matches
is not a regular expression, but a string that can contain keywords and a wildcard character *
.
I believe clout
does not support defining routes that ignore trailing slashes. You can solve the problem with a middleware function that removes trailing slashes. The following functions were taken from the old version of the compojure
source code (before the big refactoring), I could not find out if they moved to a new place. Here is the original commit that introduced these features.
(defn with-uri-rewrite "Rewrites a request uri with the result of calling f with the request original uri. If f returns nil the handler is not called." [handler f] (fn [request] (let [uri (:uri request) rewrite (f uri)] (if rewrite (handler (assoc request :uri rewrite)) nil)))) (defn- uri-snip-slash "Removes a trailing slash from all uris except \"/\"." [uri] (if (and (not (= "/" uri)) (.endsWith uri "/")) (chop uri) uri)) (defn ignore-trailing-slash "Makes routes match regardless of whether or not a uri ends in a slash." [handler] (with-uri-rewrite handler uri-snip-slash))
Christian berg
source share