小编典典

单个node.js项目中的Mongoose和多个数据库

all

我正在做一个包含子项目的 Node.js 项目。一个子项目将有一个 Mongodb 数据库,Mongoose 将用于包装和查询数据库。但问题是

  • Mongoose 不允许在单个 mongoose 实例中使用多个数据库,因为模型是建立在一个连接上的。
  • 要使用多个 mongoose 实例,Node.js 不允许多个模块实例,因为它在require(). 我知道在 Node.js 中禁用模块缓存,但我认为这不是一个好的解决方案,因为它只需要猫鼬。

我尝试在猫鼬中使用createConnection()and openSet(),但这不是解决方案。

我试图深度复制 mongoose 实例(http://blog.imaginea.com/deep-copy-in-
javascript/)以将新的 mongoose
实例传递给子项目,但它会抛出RangeError: Maximum call stack size exceeded.

我想知道无论如何使用多个数据库和猫鼬或任何解决这个问题的方法?因为我认为猫鼬非常容易和快速。或任何其他模块作为建议?


阅读 87

收藏
2022-08-24

共1个答案

小编典典

您可以做的一件事是,您可能有每个项目的子文件夹。因此,在该子文件夹中安装 mongoose,并从每个子应用程序中的自己的文件夹中安装
mongoose。不是来自项目根目录或来自全局。所以一个子项目,一个猫鼬安装和一个mongoose实例。

-app_root/
--foo_app/
---db_access.js
---foo_db_connect.js
---node_modules/
----mongoose/
--bar_app/
---db_access.js
---bar_db_connect.js
---node_modules/
----mongoose/

在 foo_db_connect.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/foo_db');
module.exports = exports = mongoose;

在 bar_db_connect.js

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/bar_db');
module.exports = exports = mongoose;

在 db_access.js 文件中

var mongoose = require("./foo_db_connect.js"); // bar_db_connect.js for bar app

现在,您可以使用 mongoose 访问多个数据库。

2022-08-24