2011-10-16 9 views
10

मैं निम्नलिखित मैपिंग काम के किसी भी मैप करने के लिए http://mysite.org/add?http://sitetoadd.com या http://mysite.org/add?u=http://sitetoadd.comCompojure: क्वेरी मैप करने के लिए कैसे पैरामीटर

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

बनाने की कोशिश कर लेकिन यह सिर्फ विफल रहता है और मैं पता नहीं क्यों कर रहा हूँ। दूसरी ओर, इस काम करता है:

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

लेकिन मैं इसे इस्तेमाल नहीं कर सकते, क्योंकि मैं एक यूआरएल पारित करने के लिए और http://mysite.org/add/http://sitetoadd.com अमान्य जबकि http://mysite.org/add?http://sitetoadd.com is ठीक है।

संपादित करें: डंपिंग request मैंने देखा है कि पैराम खाली है। मैंने सोचा था कि इसमें POST और पैरामीटर प्राप्त होंगे, लेकिन एकमात्र जगह जहां मैं पैरा को पास कर सकता हूं, मैं में है: क्वेरी-स्ट्रिंग ("u = asd")। यह seems है कि क्वेरी स्ट्रिंग को पार्स करने के लिए एक मिडलवेयर की आवश्यकता है। मेरा सवाल अभी भी, वैसे भी खड़ा है।

उत्तर

20

ब्रेकिंग परिवर्तन के तहत https://github.com/weavejester/compojure देखें। पैराम मानचित्र अब डिफ़ॉल्ट रूप से बाध्य नहीं है। यदि आपके पास "उदाहरण मुख्य मार्ग ...)" के अंदर आपके उदाहरण मार्ग हैं, तो सुनिश्चित करें कि आप https://github.com/weavejester/compojure/wiki/Getting-Started पर बताए गए अनुसार "(हैंडलर/साइट मुख्य-मार्ग)" के माध्यम से इसे सक्रिय करते हैं क्योंकि यह साइट या एपीआई विधि है सुनिश्चित करें कि पैरा मानचित्र डिफ़ॉल्ट रूप से बाध्य हो जाता है।

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

यहाँ एक उदाहरण है कि काम करता है

संबंधित मुद्दे