2011-10-16 9 views
10

Próbuję zrobić jedną z poniższych odwzorowań pracy do map http://mysite.org/add?http://sitetoadd.com lub http://mysite.org/add?u=http://sitetoadd.comCompojure: jak mapować zapytanie Parametry

(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) 

Ale to po prostu nie i nie wiem dlaczego. Z drugiej strony, to działa:

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

ale nie mogę go używać, bo mam przekazać adres URL jest nieprawidłowy i http://mysite.org/add/http://sitetoadd.com podczas http://mysite.org/add?http://sitetoadd.com is ok.

EDIT: dumping request Widziałem, że params jest pusty. Myślałem, że będzie on zawierał parametry GET POST i GET, ale jedynym miejscem, w którym mogę znaleźć parametry, które przekażę, jest : string-zapytanie ("u = asd"). To seems, że do analizy ciągów zapytań potrzebne jest oprogramowanie pośrednie. Moje pytanie wciąż stoi.

Odpowiedz

20

Zobacz https://github.com/weavejester/compojure w części Przerywanie zmian. Mapa parametrów nie jest już domyślnie związana. Jeśli masz przykładowe trasy wewnątrz "(odwraca główne trasy ...)", upewnij się, że aktywujesz to przez "(główne trasy obsługi/witryny)", jak wyjaśniono na https://github.com/weavejester/compojure/wiki/Getting-Started, ponieważ jest to strona lub metoda api, która czyni pewność, że mapa parametrów zostanie domyślnie powiązana.

Oto przykład, który działa:

(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})) 
Powiązane problemy