compojure/http-kit redirection

237 views
Skip to first unread message

JvJ

unread,
Oct 26, 2015, 4:47:09 PM10/26/15
to Clojure
Hi, I'm starting a web app with compojure and http-kit.  I would like to have one request redirect to another page, but I'm not sure how:

(defroutes app
  (GET "/ws" ws-handler) ; Websocket connection
  (GET "/user/:id" [id] ;; I want to redirect to index.html?user=id
       )
  (resources "/"))


When I get the /user/:id path, I would like to return index.html?user=id.  How can that be done?


Also, how to I interpret URL params using defroutes?


Thanks.

James Reeves

unread,
Oct 26, 2015, 6:44:33 PM10/26/15
to clo...@googlegroups.com
On 26 October 2015 at 20:47, JvJ <kfjwh...@gmail.com> wrote:
I would like to have one request redirect to another page, but I'm not sure how:

(defroutes app
  (GET "/ws" ws-handler) ; Websocket connection
  (GET "/user/:id" [id] ;; I want to redirect to index.html?user=id
       ))

When I get the /user/:id path, I would like to return index.html?user=id.  How can that be done?

Return a HTTP redirect response. So for example, you could do:

  (GET "/user/:id" [id]
    {:status 302
     :headers {"Location" (str "/index.html?user=" id)}
     :body nil})

For convenience, Ring has the ring.util.response/redirect function to make this more concise:

  (GET "/user/:id" [id]
    (redirect (str "/index.html?user=" id)))

 
Also, how to I interpret URL params using defroutes?

The same way you interpret route parameters, but you'll need to add the ring.middleware.params/wrap-params middleware to your handler.

- James 
Reply all
Reply to author
Forward
0 new messages