10

秘書と試薬を使っています。これは私のコードです:

(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)))

:prefix 値を無視すると (""、"#" を試し、:prefix をまったく設定しませんでした)、このコードは次のようなルートでのみ機能します。

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

ただし、次のようなルートでは機能しません。

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

私が実際に達成しようとしているのは、友人からのログイン失敗を解析することです。これは、失敗した場合に私をリダイレクトします

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

ログイン失敗メッセージをユーザーに表示します。これに秘書を使用する必要はありません。クエリパラメーターを解析するために機能するものは何でも問題ありません。

難しい方法は、取得できるクエリ文字列を解析することです。

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

これは、一部のライブラリですでにうまく機能していると思います。

4

2 に答える 2

1

ドキュメントから:

URI にクエリ文字列が含まれている場合、文字列ルート マッチャーの場合は :query-params に、正規表現マッチャーの場合は最後の要素に自動的に抽出されます。

(defroute "/users/:id" [id query-params]
  (js/console.log (str "User: " id))
  (js/console.log (pr-str query-params)))

(defroute #"/users/(\d+)" [id {:keys [query-params]}]
  (js/console.log (str "User: " id))
  (js/console.log (pr-str query-params)))

;; In both instances...
(secretary/dispatch! "/users/10?action=delete")
;; ... will log
;; User: 10
;; "{:action \"delete\"}"
于 2019-09-30T13:05:41.697 に答える