2015-09-14 9 views
7

Uso la segretaria e il reagente. Questo è il mio codice:Come ottenere i parametri di query in 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))) 

Trascurando il: valore del prefisso (ho provato "", "#" e, inoltre, non impostando il: prefisso a tutti) questo codice funziona solo con itinerari come:

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

Ma non funziona con itinerari come:

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

Quello che sto effettivamente cercando di raggiungere è quello di analizzare il fallimento di login da friend, che in caso di fallimento mi reindirizza a

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

e visualizzare il messaggio di accesso non riuscito all'utente. Non ho bisogno di usare la segreteria per questo, tutto ciò che funziona per analizzare i parametri della query sarebbe ok per me.

Il modo più duro sarebbe quello di analizzare la stringa di query che posso ottenere con:

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

Credo che questo è già stato fatto bene in qualche biblioteca.

risposta

11

L'ho trovato. Utilizzando https://github.com/cemerick/url (funziona sia per clojure che per clojurescript), si può fare:

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