在Clojure Luminus Web框架中配置MongoDB

在Clojure Luminus Web框架中配置MongoDB,第1张

概述我在Luminus项目中配置MongoDB数据库时遇到问题.鉴于lein模板,这应该非常简单: https://github.com/yogthos/luminus-template.键入lein new luminus< name> mongodb将为您提供默认的mongoDB设置,即文件:src / app-name / db / core.clj要运行服务器,请键入lein ring ser 我在Luminus项目中配置MongoDB数据库时遇到问题.鉴于lein模板,这应该非常简单: https://github.com/yogthos/luminus-template.键入lein new luminus< name> mongodb将为您提供默认的mongoDB设置,即文件:src / app-name / db / core.clj要运行服务器,请键入lein ring server,它应打开Web浏览器并默认将其指向localhost:3000.

将显示一个默认主页,对我来说,它告诉我“MongoDB配置是必需的”.它告诉我,我可以在同一个文件中配置它:src / app-name / db / core.clj.我尝试了很多不同的东西,但我目前正在尝试的以及对我来说最有意义的是以下内容:

(defonce coll "collection-name")(defonce db (let [uri "mongodb://127.0.0.1/db-name"                  {:keys [conn db]} (mg/connect-via-uri uri)]              db))

不幸的是,当我连接浏览器时,我仍然得到相同的“MongoDB配置是必需的”消息.我也尝试使用CURL和我的应用程序中定义的各种http路由访问数据库但没有成功.但奇怪的是,这在REPL中起作用.

编辑:更清楚,以下是REPL中的示例:

clj-project-name.db.core> (get-replIEs 2)["mew-mew" [1.0 "hello"]]

在代码中我有以下几件:

(ns clj-project-name.routes.home  (:require [compojure.core :refer :all]            [clj-project-name.layout :as layout]            [clj-project-name.util :as util]            [clj-project-name.db.core :as project-db]))(defn get-replIEs [ID] (mc/distinct db coll "replIEs" {:_ID ID}))(GET "/user" [ID] (user-page ID))  ; defined in home-routes insIDe namespace clj-project-name.routes.home (defn user-page [& [ID]]           ;defined insIDe namespace clj-project-name.routes.home  (layout/render "user.HTML"                 {:ID ID                  :replIEs (projectl-db/get-replIEs ID)}))<h1>User {{ID}}'s page</h1>           ; part of the HTML template<p> <b>ReplIEs:</b> {{replIEs}} </p>

这是浏览器中加载的页面:

正如我们所看到的,回复列表是空的,当它应该是[“mew-mew”[1.0“hello”]]时,就像我们在REPL中看到的那样.

编辑:另一个奇怪的是,只要在键入lein ring server后加载浏览器,我就可以在终端中看到mongodb的以下输出:

2014-12-02T21:16:57.941-0500 [initandListen] connection accepted from 127.0.0.1:38854 #28 (5 connections Now open).

我还可以做些什么来连接到MongoDB?谢谢你的帮助.

解决方法 我按照你的步骤使用luminus模板创建了新的Luminus项目.

我还研究了生成的代码,默认主页是100%静态的.因此,它显示MongoDB配置是必需的,无论它是否实际配置:

(defn home-page []  (layout/render    "home.HTML" {:content (util/md->HTML "/md/docs.md")}))

换句话说,它只是将resources / public / md / docs.md呈现为.HTML并显示它,始终是相同的HTML页面.

至于你的配置,它绝对没问题.

至于你的user.HTML页面,实际问题是用户页面路由中的ID是一个字符串,而数据库中的_ID是一个数字.所以,而不是(获得回复2)你正在调用(获得回复“2”).尝试使用字符串化的_IDs,或者首先使用read-string function或Long / parseLong解析传入的ID:

(defn user-page [& [ID]]  (layout/render "user.HTML"                 {:ID ID                  :replIEs (-> ID                               Long/parseLong ; throws NumberFormatException                               project-db/get-replIEs)}))

我建议使用字符串化的_IDs,因为它比将字符串解析为数字更容易,更安全.

总结

以上是内存溢出为你收集整理的在Clojure Luminus Web框架中配置MongoDB全部内容,希望文章能够帮你解决在Clojure Luminus Web框架中配置MongoDB所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1044209.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存