2013-04-06 36 views
5

Tôi muốn xác định một tài nguyên trong Compojure như thế này:Compojure: tùy chọn tham số URL

(ANY "myres/:id" [id] (handler)) 

và tôi muốn: id là tùy chọn (tùy thuộc vào việc hay không ID được quy định API của tôi sẽ hành xử khác nhau).

này hoạt động ok nếu tôi cố gắng truy cập vào

http://mydomain/myres/12 

Tuy nhiên nếu tôi cố gắng truy cập vào

http://mydomain/myres 

mà không chỉ định một ID, tôi nhận được 404.

Có cách nào để có tham số: id là tùy chọn?

Cảm ơn!

Trả lời

8

gì về việc tạo 2 tuyến đường khác nhau một với id và khác mà không có nó và kêu gọi xử lý của bạn từ cả hai tuyến đường như hình dưới đây:

(defn handler 
    ([] "Response without id") 
    ([id] (str "Response with id - " id))) 

(defroutes my-routes 
    (ANY "myres" [] (handler)) 
    (ANY "myres/:id" [id] (handler id))) 
+0

Cảm ơn bạn đã giải pháp của bạn mà tôi chắc chắn sẽ áp dụng! Đó là một sự xấu hổ: thông số id không được coi là tùy chọn theo mặc định. Tôi không thích ý tưởng phải xác định hai tuyến đường đặc biệt nếu tôi có nhiều tài nguyên theo cùng một mẫu: ( –

Các vấn đề liên quan