Compojure использует clout для сопоставления маршрута. Точечный символ имеет особое значение в маршрутах. Он представляет разделитель токенов, аналогично символу косой черты. Следующие символы имеют это значение в clout: / . , ; ?
.
Это означает, что маршрут типа "/images/:id"
не будет соответствовать uri вида /images/name.jpg
, поскольку images
, name
и jpg
каждый представляет отдельный токен в clout.
Чтобы сопоставить его, вы можете составить маршрут различными способами, в зависимости от ваших потребностей.
Если все ваши изображения имеют расширение .jpg
, проще всего будет:
(GET "/images/:id.jpg" [id] ...)
Если расширение варьируется, вы можете сделать следующее:
(GET "/images/:name.:extension" [name extension] ...)
Если вы хотите ограничить расширение, вы можете передать compojure / clout регулярное выражение:
(GET ["/images/:name.:ext", :ext #"(jpe?g|png|gif)"] [name ext] ...)
Вы также можете использовать подстановочный знак, который является менее точным и будет соответствовать любому URI, начинающемуся с /images/
:
(GET "/images/*" [*] ...)