0

我有一个连接到的 mongodb 数据库,如下所示:

(let [uri  (config-keys :mongoURI)
      {:keys [conn db]} (mg/connect-via-uri uri)])

在带有 mongoose 的 Node.js 中,可以这样做mongoose.Promise = global.Promise,只连接到数据库一次,然后从全局命名空间中的任何文件中使用它。如何使用 monger 执行此操作,这样我就不必在每个使用数据库的文件中重复上面的代码,而是只连接一次?

4

1 回答 1

0

所以你的问题可以概括为:如何在我的应用程序中管理全局状态。

有几个库可以帮助您做到这一点:

  1. 组件,可让您创建全局状态映射,并将其传递给需要它们的函数
  2. mount可以让你创建类似于全局变量的东西
  3. 整合者

您也可以在没有任何特定库的情况下使用中间件执行此操作(假设您使用的是ring):

(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]
  ...)
于 2020-02-04T07:14:08.243 回答