compojure 0.6.0: problem getting post arguments with google app engine

549 Views Asked by At

This is how I define my app:

(defroutes index
   (GET "/" [] (main-page))
   (GET "/form" [] (render-page "Vote" (render-form)))
   (POST "/vote" {params :params} (post-vote params))
   (route/not-found "Page not found"))

(def app (site index))

(defservice app)

The site here is used to capture :params, which is a new in compojure 0.6.0. However I'm getting a empty map in post-vote. I wonder what's wrong with the above code?

2

There are 2 best solutions below

0
On

as I replied in the mailing-list, please ensure, that your form is really sending the params (input controls in html form have to have name="..." attribute)

0
On

If you are running this on google app engine, I don't think you can use the (site) convenience function as it includes ring's (wrap-multipart-params) function which uses a java class not permitted by google.

Unless you are uploading a file from your form, you probably don't need multipart-params. Try removing compojure.handler from your namespace and replacing your (def app (site index)) with something like:

(def app
     (-> index
     (wrap-keyword-params)
     (wrap-nested-params)
     (wrap-params)))

Cheers, Colin