一尘不染

单节点和项目中的猫鼬和多个数据库

node.js

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

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

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

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

我想知道是否存在将多个数据库与猫鼬结合使用或解决此问题的任何解决方法?因为我认为猫鼬非常容易和快速。还是任何其他模块作为建议?


阅读 219

收藏
2020-07-07

共1个答案

一尘不染

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

-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

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

2020-07-07