2016-12-13 18 views
7

işlemek için {:b [1 2]} ÖrneğinClojure halka katman ClojureScript cljs-ajax istemci kitaplığı dönüştürür url dizi

b[0]=1&b[1]=2 için:

"http://example.com?b[0]=1&b[1]=2" 

Nasıl: Bir istekte

(http/get "http://example.com" {:b [1 2]}) 

sonuç Bu formatı sunucu tarafında işlemek için ring middleware'i ayarlıyorum? Ben orijinal yapıya geri dönüştürmek istiyorum: Aşağıda ortakatmanını kullanıyorum

{:b [1 2]} 

, ancak düzgün çalışmıyor:

(ring.middleware.keyword-params/wrap-keyword-params) 
(ring.middleware.params/wrap-params :encoding encoding) 
(ring.middleware.nested-params/wrap-nested-params) 

cevap

0

Ben katman iyi çalışıyor öneririm, ama Belki de ne yaptığı ve beklentileriniz arasında bir yanlışlık vardır. Yukarıda sahip olduğun şeyin sadece ara yazılımın bir listesi olduğunu ve onu nasıl çağırdığını/kullanacağını varsayıyorum. Değilse, yolunuz kapalı.

Kesin olarak, geçmeye çalıştığınız şey yuvalanmış bir parametre değildir. Gerçekten sahip olduğunuz, her birinin değeri olan "b [0]" ve "b [1]" gibi adlara sahip parametrelerdir. Bunun nedeni, clojure veri yapınızı normal sorgu parametresi biçimine çevirmek için post ve cljs-ajax gereksinimlerini değil, almayı kullanmanızdır. Bunu yapmak için güçlü bir neden olmadığı sürece, vücudunuzdaki verileri json/edn/transit olarak yerleştirmek ve yerleştirmek yerine bir gönderi yöntemi kullanırsanız hayatı daha kolay bulacaksınız. Ayrıca, verilerinizin URL’nin bir parçası olarak 'herkese' gönderilmeyeceği ve tüm yerlerin günlükleri tarafından yakalanmasının ek bir yararı vardır.

Cljs-ajax ve post komutlarıyla kullanılacak yararlı bir sunucu tarafı paketi ring.middleware.format'tır. Bu, isteğinizin gövdesindeki verilerin ayrıştırılmasını basitleştirir ve birden çok farklı veri kodlama yöntemini destekler.

1

Ara katman tarafında sorun yoktur. Sorun, cljs-ajax's ajax.core/params-to-str API'sindedir. Farklı veri formatı için kopya URL üretiyor.

(ajax.core/params-to-str {:b [1 3]}) 
;; => "b[0]=1&b[1]=3" 

(ajax.core/params-to-str {:b {0 1 1 3}}) 
;; => "b[0]=1&b[1]=3" 

dizisi için, biçiminde b[]=1&b[]=3 olmalıdır.

İlgili konular