我有一个 mongodb 数据库,我已经连接到它,如下所示:
(let [uri (config-keys :mongoURI)
{:keys [conn db]} (mg/connect-via-uri uri)])
在 Node.js 中使用猫鼬,可以执行mongoose.Promise = global.Promise
,仅连接到数据库一次,然后从全局命名空间中的任何文件使用它。如何使用 monger 执行此操作,以便我不必在使用数据库的每个文件中重复上述代码,而只需连接一次?
因此,您的问题可以概括为:如何在应用程序中管理全局状态。
有几个库可以帮助您执行此操作:
- 组件,可让您创建全局状态映射,并将其传递给需要它们的函数
- mount,可让您创建类似于全局变量的内容
- 组成部分
您也可以在没有任何特定库的情况下使用中间件(假设您使用的是环(来执行此操作:
(defn add-db-to-req [handler uri]
(fn [req]
(let [connection (mg/connect-via-uri uri)]
(handler (assoc req :connection connection)))))
任何下游的中间件都可以通过以下方式访问连接
(:connection req)
并将其传递给需要它的函数。
通常,您需要将connection
传递给依赖于它的任何函数,而不是依赖于全局状态:
(defn fetch-from-database [{:keys [db conn] :as connection} whatever]
...)