Monger会话商店

6l7fqoea  于 2022-10-22  发布在  Go
关注(0)|答案(1)|浏览(117)

在前面的一个问题中,我问了Clojure会话到底是如何工作的,之后我一直在试验Monger
在文档中,您可以找到代码片段:

(ns monger.docs.examples
  (:require [monger.core :as mg]
            [monger.ring.session-store :refer [monger-store]]))

;; create a new store, typically passed to server handlers
;; with libraries like Compojure
(let [conn  (mg/connect)
      db    (mg/get-db conn "monger-test")]
  (monger-store db "sessions"))

这很有帮助,但我不知道如何实现处理程序。有没有人解释这是如何工作的,与处理程序交互,或者嵌入处理程序本身?
编辑:
到目前为止,我已经尝试过了:

(def app-handler 
  (let [{:keys [_ db]} (mg/connect-via-uri (env :mongo-uri))]
   (-> handler
      (session/wrap-session {:store (session-store db "sessions")}))))

但得到:

java.lang.ClassCastException: class java.lang.String cannot be cast to class clojure.lang.Associative (java.lang.String is in module java.base of loader 'bootstrap'; clojure.lang.Associative is in unnamed module of loader 'app')

所以,它显然不喜欢前面的Map,但这是我在其他任何地方都看到的模式。任何想法(和解释)都会很棒!

3pvhb19x

3pvhb19x1#

什么是handler?你能添加更多你尝试过的代码吗?
根据错误消息,您将在需要Map的位置返回一个字符串。
请注意,session-store应该返回ring.middleware.session.store/SessionStore的实现。见wrap-session

相关问题