我在 Luminus 项目中配置 MongoDB 数据库时遇到问题。考虑到 lein 模板,这应该非常简单:https ://github.com/yogthos/luminus-template 。键入lein new luminus <name> +mongodb
将为您提供默认的 mongoDB 设置,即文件:src/app-name/db/core.clj
要运行服务器,键入应打开 Web 浏览器并默认lein ring server
指向它的类型。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>
这是在浏览器中加载的页面:
正如我们所看到的,replies
列表是空的,而它应该是 ["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?谢谢你的帮助。