Строка пути, ожидаемая clout
в качестве первого аргумента route-matches
, является не регулярным выражением, а строкой, которая может содержать ключевые слова и подстановочный знак *
.
Я считаю, clout
неизначально не поддерживает определение маршрутов, которые игнорируют косую черту.Вы можете решить проблему с помощью функции промежуточного программного обеспечения, которая удаляет завершающие косые черты.Следующие функции были взяты из старой версии compojure
исходного кода (до большого рефакторинга), я не мог узнать, переместились ли они на новое место.Вот оригинальный коммит , который ввел эти функции.
(defn with-uri-rewrite
"Rewrites a request uri with the result of calling f with the
request's 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))