16

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

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

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

有人对管理此问题的最佳方法有任何提示吗?

4

6 回答 6

10

您已经通过使用类似这样的操作来分享您的猫鼬实例

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”

于 2012-10-11T19:17:54.427 回答
5

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

于 2012-11-26T14:39:16.237 回答
5

我共享 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);
于 2016-11-01T12:29:39.367 回答
2

一种方法是将 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);
于 2018-01-18T09:50:24.323 回答
0
./shared/models/user.js

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

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

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

于 2012-09-28T01:19:17.420 回答
-2

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

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

于 2017-08-07T08:47:43.680 回答