我如何在两个应用程序之间共享mongoose模型?

我有2个应用程序,每个在不同的文件夹,他们需要共享相同的模型。

我想将模型文件夹从应用程序A符号链接到应用程序B中的模型文件夹。

我遇到的问题是,一旦你在应用程序A中调用了mongoose.model('Model',Schema),它们被绑定到该应用程序的mongoose / mongodb连接上。

有没有人有任何提示,以最好的方式来pipe理呢?

通过使用这样的事情,你可以分享你的mongoose实例

 var mongoose = require('mongoose'); module.exports.mongoose = mongoose; var user = require('./lib/user'); 

现在在“lib / user.js”里面

 var mongoose = module.parent.mongoose; var model = mongoose.model('User', new mongoose.Schema({ ... }); module.exports = model; 

这样做,你可以在其他应用程序需要“lib / user.js”

我共享Mongoose模型的方法是将mongoose对象作为parameter passing给定义模式的共享模块并创build模型。 所以共享架构/模型的文件如下所示:

 module.exports = function(mongoose) { var packageSchema = new mongoose.Schema({ title: { type: String, required: true }, description: String }); mongoose.model('Package', packageSchema, 'packages'); }; 

然后每个项目都要求他们这样做:

 var mongoose = require('mongoose'); var mongo_url = process.env.MONGO_CONNECTION; mongoose.Promise = global.Promise; mongoose.connect(mongo_url, connectOpts); require('../../../shared/models/packages')(mongoose); 

我最终做的是在App2中将app1作为子模块(使用Git)导入。 这样,模型可以正常导入,并绑定到应用程序的默认mongoose连接。

 ./shared/models/user.js ./app1/app.js var user = require('../shared/user.js'); ./app2/app.js var user = require('../shared/user.js'); 

我不明白为什么你不能从一个共享的path加载模型。

如果您想在其他NPM软件包之间重复使用Mongoose软件包,最好的方法是在顶级应用程序上安装共享软件包,然后使用它来初始化其他NPM软件包。

你可以使用这个npm模块: https ://www.npmjs.com/package/mongoose-global