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

evi*_*ery 12 mongoose mongodb node.js express

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

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

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

有没有人有关于管理这个的最佳方法的任何提示?

Nat*_*ano 9

你通过使用这样的东西分享你的mongoose实例

var mongoose = require('mongoose');
module.exports.mongoose = mongoose;

var user = require('./lib/user');
Run Code Online (Sandbox Code Playgroud)

现在在"lib/user.js"里面

var mongoose = module.parent.mongoose;
var model = mongoose.model('User', new mongoose.Schema({ ... });
module.exports = model;
Run Code Online (Sandbox Code Playgroud)

这样做可以在其他应用程序中使用"lib/user.js"


evi*_*ery 5

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

  • 听起来很有趣。您能否详细说明? (3认同)

Eri*_*ill 5

我共享 Mongoose 模型的方法是将 mongoose 对象作为参数传递给定义模式并创建模型的共享模块。因此具有共享模式/模型的文件如下所示:

module.exports = function(mongoose) {

    var packageSchema = new mongoose.Schema({
        title:          { type: String, required: true },
        description:    String
    });

    mongoose.model('Package', packageSchema, 'packages');
};
Run Code Online (Sandbox Code Playgroud)

然后每个项目都像这样要求它们:

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);
Run Code Online (Sandbox Code Playgroud)