Сессии по шаблону Leiningen "Реагент" - PullRequest
0 голосов
/ 06 января 2019

Я использую шаблон Reagent, который мне нравится, но я изо всех сил пытаюсь сохранить данные сеанса с одной страницы на другую.

Вот моя проблема, приведенная к самодостаточному примеру. Начните с выполнения "lein new ragent rgtest". Разверните файл handler.clj и вставьте пару маршрутов:

(reitit-ring/router
 [
;INSERTION START
  ["/seshtest"
    {:get {
      :handler (fn [{session :session}]
       {:status 200 :headers {"Content-Type" "text/html"}
        :session (assoc session :seshvar (inc (:seshvar session 400)))
        :body (html5 (head)[:body [:span (str (:seshvar session "~"))]])})}}]
  ["/seshtest2"
    {:get {
      :handler (fn [{session :session}]
      {:status 200 :headers {"Content-Type" "text/html"}
       :session (assoc session :seshvar (inc (:seshvar session 400)))
       :body (html5 (head)[:body [:span (str (:seshvar session "~"))]])})}}]
;INSERTION END

Теперь, если я сделаю «lein figwheel», я могу перейти к «/ seshtest» под сайтом, многократно обновлять и видеть увеличивающееся значение. Я также могу перейти к «/ seshtest2», обновить и увидеть увеличивающееся значение.

Проблема в том, что это числовое значение не распространяется на две страницы. То есть, если я перехожу к «/ seshtest» и обновляюсь, пока не вижу, скажем, «410», а затем перехожу к «/ seshtest2», я не вижу 411. Я вижу значение по умолчанию ~, и если я обновляю Я вижу 401, 402 и так далее.

Так что мой сеанс уничтожается при изменении URL. Аналогично, cookie-файл «ring-session» изменяется на другое значение, когда я переключаю свой запрос GET на другой URL.

Мне пришло в голову, что это может происходить, потому что шаблон Реагента не предвидит изменения страницы. Существует такая вещь, как одностраничное приложение Reagent; это не то, чего я пытаюсь достичь, и не все приложения React, с которыми я работал, были настоящими SPA, но, возможно, шаблон ожидает SPA.

Если это так, мне нужно знать, есть ли другой шаблон, который я должен использовать. Мне нужен Hiccup на стороне сервера и перезагрузка для файлов CLJ и CLJS, но если мне придется пожертвовать наличием React на стороне клиента, чтобы получить межстраничные сеансы, тогда я могу принять это.

Если есть простой способ выполнить то, что я хочу, используя шаблон «реагент лейн», я бы тоже хотел об этом знать.

Спасибо!

...