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

时间:2012-09-28 00:34:36

标签: node.js mongodb express mongoose

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

我想将app A中的models文件夹符号链接到app B中的models文件夹。

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

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

6 个答案:

答案 0 :(得分:9)

你通过使用类似的东西分享你的猫鼬实例

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”

答案 1 :(得分:4)

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

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);

答案 2 :(得分:3)

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

答案 3 :(得分:1)

./shared/models/user.js

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

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

我不明白为什么你不能只从共享路径加载模型。

答案 4 :(得分:0)

一种方法是将Schema抽象为纯JavaScript对象,然后导入该对象以用于在应用程序中构建模型。

例如,对于“产品”架构:

<强> WWW / APP1 / ProductConfig.js

const ProductConfig = {
  name: String,
  cost: Number
}
module.exports = ProductConfig;

<强> WWW / APP1 / ProductSchema.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ProductConfig = require('./ProductConfig');

const Product = new Schema(Product);

module.exports = mongoose.model('Product', Product);

<强> WWW / APP2 / ProductSchema.js

const mongoose = require('mongoose');
const Schema = mongoose.Schema;
const ProductConfig = require('../app1/ProductConfig');

const Product = new Schema(Product);

module.exports = mongoose.model('Product', Product);

答案 5 :(得分:-1)

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

您可以使用此npm模块:https://www.npmjs.com/package/mongoose-global