猿问

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

单节点.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.

我想知道是否有任何方式使用多个数据库与猫鼬或任何解决办法这个问题?因为我觉得猫鼬很容易很快。或者其他模块作为推荐?


莫回无
浏览 758回答 3
3回答

慕神8447489

您可以做的一件事是,您可能有每个项目的子文件夹。因此,在该子文件夹中安装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现在,您可以使用猫鼬访问多个数据库。

慕莱坞森

根据精细手册, 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' }}));我很确定您可以在它们之间共享模式,但是您必须检查以确保。

慕的地6264312

作为另一种方法,Monose在默认实例上为新实例导出构造函数。所以像这样的事情是有可能的。var Mongoose = require('mongoose').Mongoose;var instance1 = new Mongoose();instance1.connect('foo');var instance2 = new Mongoose();instance2.connect('bar');当您使用不同的数据源时,以及当您希望为每个用户或请求创建一个单独的数据库上下文时,这是非常有用的。您需要小心,因为这样做可以创建大量的连接。确保在不需要实例时调用disconnect(),并限制每个实例创建的池大小。
随时随地看视频慕课网APP
我要回答