Как я могу делиться моделями mongoose между двумя приложениями?

У меня есть 2 приложения, каждая из которых находится в другой папке, и они должны использовать одни и те же модели.

Я хочу символизировать папку моделей из приложения A в папку моделей в приложении B.

У меня возникают проблемы с тем, что, как только вы вызываете mongoose.model( "Модель", "Схема" ) в приложении A, они "привязаны" к этому приложению mongoose/mongodb.

Есть ли у кого-нибудь советы по наилучшему способу управления этим?

Ответ 1

Что я здесь делал, это импортировать app1 в качестве подмодуля (с Git) в app2. Таким образом, модели можно импортировать как обычно и привязаны к соединению по умолчанию по умолчанию mongoose.

Ответ 2

У вас есть общий экземпляр 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" в других приложениях

Ответ 3

Мой подход к обмену моделями 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);

Ответ 4

./shared/models/user.js

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

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

Я не понимаю, почему вы не могли просто загружать модели из общего пути.

Ответ 5

Если вы хотите повторно использовать пакет Mongoose между другими пакетами NPM, лучший способ сделать это - установить общий пакет в приложении верхнего уровня, а затем использовать его для инициализации других пакетов NPM.

Вы можете использовать этот модуль npm: https://www.npmjs.com/package/mongoose-global

Ответ 6

Один из подходов состоит в том, чтобы абстрагировать схему в простой объект 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);