2015-09-14 16 views
7

Tôi đang sử dụng thư ký và thuốc thử. Đây là mã của tôi:Cách nhận tham số truy vấn bằng 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))) 

Bất chấp sự: Giá trị tiền tố (Tôi đã thử "", "#" và cũng không thiết lập: tiền tố ở tất cả) mã này chỉ hoạt động với các tuyến đường như:

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

Nhưng nó không hoạt động với các tuyến đường như:

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

những gì tôi đang thực sự cố gắng để đạt được là để phân tích sự thất bại đăng nhập từ friend, mà trong trường hợp thất bại chuyển hướng tôi đến

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

và thông báo đăng nhập hiển thị không thành công cho người dùng. Tôi không cần phải sử dụng thư ký cho này, mọi thứ hoạt động để phân tích cú pháp tham số truy vấn sẽ là ok đối với tôi.

Cách chăm chỉ sẽ được phân tích chuỗi truy vấn mà tôi có thể nhận được với:

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

Tôi tin rằng điều này đã được thực hiện tốt trong một số thư viện.

Trả lời

11

Tôi đã tìm thấy. Sử dụng https://github.com/cemerick/url (hoạt động cho cả clojure và clojurescript), bạn có thể làm:

(require '[cemerick.url :as url]) 
(:query (url/url (-> js/window .-location .-href))) 
Các vấn đề liên quan