2011-10-16 15 views
10

Sto cercando di fare una delle seguenti lavori mappature per map http://mysite.org/add?http://sitetoadd.com o http://mysite.org/add?u=http://sitetoadd.comCompojure: come mappare Parametri query

(GET "/add?:url" [url] url) 
    (GET "/add?u=:url" [url] url) 
    (GET "/add" {params :params} (params :u)) 
    (GET "/add" {params :params} (params "u")) 
    (GET "/add" [u] u) 

Ma proprio non riesce e non so perché. D'altra parte, questo funziona:

(GET "/add/:url" [url] url) 

ma non posso usarlo perché devo passare un URL e http://mysite.org/add/http://sitetoadd.com non è valido, mentre http://mysite.org/add?http://sitetoadd.com is ok.

EDIT: dumping request ho visto che i parametri sono vuoti. Ho pensato che avrebbe contenuto i parametri GET POST e, ma l'unico posto in cui posso trovare i parametri che passo è in : query-string ("u = asd"). È seems che è necessario un middleware per analizzare le stringhe di query. A proposito, la mia domanda rimane ferma.

risposta

20

Vedere https://github.com/weavejester/compojure in Ultime modifiche. La mappa params non è più associata per impostazione predefinita. Se hai percorsi di esempio all'interno di "(defroutes main-routes ...)", assicurati di attivarlo tramite "(handler/site main-routes)" come spiegato su https://github.com/weavejester/compojure/wiki/Getting-Started in quanto è il metodo site o api che rende certo la mappa params viene associata per impostazione predefinita.

Ecco un esempio che funziona:

(ns hello-world 
    (:use compojure.core, ring.adapter.jetty) 
    (:require [compojure.route :as route] 
      [compojure.handler :as handler])) 

(defroutes main-routes 
    (GET "/" {params :params} (str "<h1>Hello World</h1>" (pr-str params))) 
    (route/not-found "<h1>Page not found</h1>")) 

(defn -main [& m] 
    (run-jetty (handler/site main-routes) {:port 8080})) 
Problemi correlati