2015-09-14 22 views
7

Używam sekretarki i odczynnika. To jest mój kod:Jak uzyskać parametry zapytania w clojurescript?

(def view (atom nil)) 

(defn layout [view] 
    [:div @view]) 

(reagent/render-component [layout view] (.getElementById js/document "message")) 

(secretary/set-config! :prefix "") 

(secretary/defroute home-path "/" [query-params] 
    (timbre/info "Path : /, query params : " query-params) 
    (let [warning (:warning query-params) 
     success (:success query-params) 
     login-failed (:login_failed query-params)] 
    (when warning 
     (timbre/info "Warning found : " warning) 
     (reset! view [:h4 [:span.label.label-warning warning]])) 
    (when success 
     (timbre/info "Success found : " success) 
     (reset! view [:h4 [:span.label.label-info success]])) 
    (when login-failed 
     (timbre/info "Login failed") 
     (reset! view [:h4 [:span.label.label-warning "Login Failed."]])))) 

(let [h (History.)] 
(goog.events/listen h EventType.NAVIGATE #(secretary/dispatch! (.-token %))) 
(doto h 
    (.setEnabled true))) 

Pomijając: wartość prefiksu (próbowałem „”, „#”, a także nie ustawienie: prefiks w ogóle) ten kod działa tylko z tras, takich jak:

http://localhost:8080/login#/?success=SuccessMessage 

Ale to nie działa na trasach takich jak:

http://localhost:8080/login?success=SuccessMessage 

Co ja właściwie chce osiągnąć to przeanalizować niepowodzenia logowania z friend, który w razie awarii przekierowuje mnie do

http://localhost:8080/login?&login_failed=Y&username=someUser 

i wyświetla komunikat o błędzie logowania użytkownika. Nie muszę używać sekretarza do tego, wszystko, co działa, aby przeanalizować parametry zapytania, byłoby dla mnie ok.

Twardy sposobem byłoby analizować ciąg kwerendy, które mogę dostać z:

(-> js/window .-location .-search) 

wierzę, że to już jest zrobione dobrze w jakiejś bibliotece.

Odpowiedz

11

Znalazłem. Używając https://github.com/cemerick/url (działa zarówno dla clojure, jak i clojurescript), można wykonać:

(require '[cemerick.url :as url]) 
(:query (url/url (-> js/window .-location .-href)))