在一个previous question中,我询问了在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')所以,它显然不喜欢前面的映射,但这是我在其他地方看到的模式。任何想法(和解释)都会很棒!
发布于 2022-10-19 11:24:47
handler是什么?你能多加一点你尝试过的代码吗?
根据错误消息,您将返回一个字符串,在该字符串中需要映射。
注意,session-store应该返回ring.middleware.session.store/SessionStore的一个实现。见wrap-session。
https://stackoverflow.com/questions/74050794
复制相似问题