为了账号安全,请及时绑定邮箱和手机立即绑定

单节点.js项目中的monose和多个数据库

单节点.js项目中的monose和多个数据库

莫回无 2019-07-22 19:31:10
单节点.js项目中的monose和多个数据库我正在做一个包含子项目的Node.js项目。一个子项目将有一个MongoDB数据库,Monose将用于包装和查询db。但问题是Monose不允许在单个monose实例中使用多个数据库,因为模型构建在一个连接上。要使用多个monose实例,Node.js不允许多个模块实例,因为它在require()..我知道在Node.js中禁用模块缓存,但我认为这不是一个好的解决方案,因为它只需要猫鼬。我试着用createConnection()和openSet()在猫鼬身上,但这不是解决办法。我试图深入复制猫鼬实例(http:/blog.Imaginea.com/深处复制javascript/)将新的猫鼬实例传递给子项目,但它会抛出RangeError: Maximum call stack size exceeded.我想知道是否有任何方式使用多个数据库与猫鼬或任何解决办法这个问题?因为我觉得猫鼬很容易很快。或者其他模块作为推荐?
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

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

-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

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


查看完整回答
反对 回复 2019-07-22
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

根据精细手册createConnection() 能,会,可以用于连接到多个数据库。

但是,您需要为每个连接/数据库创建单独的模型:

var conn      = mongoose.createConnection('mongodb://localhost/testA');var conn2     = mongoose.createConnection('mongodb://localhost/testB');// stored in 'testA' databasevar ModelA    = conn.model('Model', new mongoose.Schema({
  title : { type : String, default : 'model in testA database' }}));// stored in 'testB' databasevar ModelB    = conn2.model('Model', new mongoose.Schema({
  title : { type : String, default : 'model in testB database' }}));

我很确定您可以在它们之间共享模式,但是您必须检查以确保。


查看完整回答
反对 回复 2019-07-22
?
慕的地6264312

TA贡献1817条经验 获得超6个赞

作为另一种方法,Monose在默认实例上为新实例导出构造函数。所以像这样的事情是有可能的。

var Mongoose = require('mongoose').Mongoose;var instance1 = new Mongoose();instance1.connect('foo');var instance2 = new Mongoose();instance2.connect('bar');

当您使用不同的数据源时,以及当您希望为每个用户或请求创建一个单独的数据库上下文时,这是非常有用的。您需要小心,因为这样做可以创建大量的连接。确保在不需要实例时调用disconnect(),并限制每个实例创建的池大小。


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 757 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信