【问题标题】:Monger session storeMonger 会话商店
【发布时间】:2022-10-19 19:24:47
【问题描述】:

previous question 询问Clojure 会话到底是如何工作的之后,我一直在尝试Monger

在文档中,您可以找到代码 sn -p:

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

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

【问题讨论】:

  • 似乎您的主要问题是构建 Web 服务器。查看github.com/dharrigan/startrek 以获得一个简单但完整的示例。即使它使用特定的 Web 服务器 (juxt/clip),它至少应该让您了解各个部分应该如何协同工作。

标签: mongodb session clojure ring monger


【解决方案1】:

handler 是什么?您可以添加更多您尝试过的代码吗?

根据某处的错误消息,您返回一个字符串,该字符串是预期的地图。

注意session-store 应该返回ring.middleware.session.store/SessionStore 的实现。见wrap-session

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    相关资源
    最近更新 更多