2013-05-23 26 views
6

org.clojure/Clojure-katkı "1.2.0" halka "1.1.8" compojure "1.1.5" nüfuz "1.1.0"nasıl erişmek için: compojure işlevi içinde başlıklarını

(defroutes rest-routes 
    (GET "/" [] "<p> Hello </p>") 
    (POST "/api/v1/:stor/sync" [stor] (start-sync stor)) 
    (POST ["/api/v1/:stor/:txn/data/:file" :file #".*"] [stor txn file] (txn-add stor txn file)) 
    (ANY "*" [] "<p>Page not found. </p>")) 

İkinci POST'ta, tüm http başlıklarını "txn-add" işleyicisine iletmek istiyorum. Çok fazla Google yaptım ve kodu inceledim, ancak yararlı bir şey bulamadım. POST isteğinin: (beden yani)

Ben de

(POST "/api/v1" 
    {headers :headers} (txn-add "dummy stor" "dummy txn" headers)) 

, ben içerik geçmesi nasıl, başlıklar geçmek için aşağıdaki kullanabilirsiniz (ama sonra URL isteği ayrıştırmak değil), biliyorum "txn-add" için?

+0

doğru. – Ankur

cevap

8

GET, POST vb. Ikinci argümanı bir vektör değilse, request için bir yıkıcı ciltleme formudur. Yani gibi şeyler yapabilirsiniz gelir:

(GET "/my/path" 
    {:keys [headers params body] :as request} 
    (my-fn headers body request)) 

istediğiniz request bölümlerini ortaya çıkarmak için. Bkz the Ring SPEC ve Clojure's docs on binding & destructuring

+0

Ben bir bütün olarak clojure biraz yeni (sadece iki hafta oldu). Bu nedenle, cevabınızı anladığımdan emin değilim. Bununla birlikte, [URL tln dosyası] için "url" bölümünü ayrıştırmam gerekiyor ve daha sonra şunları iletmeliyim: "POST ["/api/v1 /: stor /: txn/data /: file ": file # ". *"] [stor txn dosyası] (txn-add stor txn dosyası)). Yani, ben vektör argüman ve yıkıcı ciltleme formu kombinasyonu, bu –

6

bütün istek haritası bağlantılarında :as anahtar kelimeyi kullanarak bağları belirtilen ve daha sonra başlıklarını veya vücudu okumak için kullanılabilir: Eğer çözüm cevabı işaretlemek için emin olun bulduysanız

(POST ["/api/v1/:stor/:txn/data/:file" :file #".*"] 
     [stor txn file :as req] 
     (my-handler stor txn file req)) 
+0

elde etmek için nasıl sağlamanız gerekir. Sihri yaptı (ancak yine de benim için kara bir sihirdi, zira bunu github'daki sentezleme koduna bakarak anlayamadım). Şimdi, tüm parametreleri (url compnonents ve headers) işleyiciye iletebiliyorum. –

+0

Bağlamaların nasıl işlendiğine ilişkin https://github.com/weavejester/compojure/blob/master/src/compojure/core.clj#L66 adresine bakın. – Ankur

+0

Teşekkürler Ankur. 'Vektör bağlamaları' uygulamasının uygulanmasına baktığımızda, her şey nasıl işlediğiyle ilgili olarak şimdi bana açıktır. –

İlgili konular