Ответ 1
Что я здесь делал, это импортировать app1 в качестве подмодуля (с Git) в app2. Таким образом, модели можно импортировать как обычно и привязаны к соединению по умолчанию по умолчанию mongoose
.
У меня есть 2 приложения, каждая из которых находится в другой папке, и они должны использовать одни и те же модели.
Я хочу символизировать папку моделей из приложения A в папку моделей в приложении B.
У меня возникают проблемы с тем, что, как только вы вызываете mongoose.model( "Модель", "Схема" ) в приложении A, они "привязаны" к этому приложению mongoose/mongodb.
Есть ли у кого-нибудь советы по наилучшему способу управления этим?
Что я здесь делал, это импортировать app1 в качестве подмодуля (с Git) в app2. Таким образом, модели можно импортировать как обычно и привязаны к соединению по умолчанию по умолчанию mongoose
.
У вас есть общий экземпляр 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 в качестве аргумента в общий модуль, который определяет схемы и создает модели. Таким образом, файл с общими схемами/моделями выглядит так:
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);
./shared/models/user.js
./app1/app.js
var user = require('../shared/user.js');
./app2/app.js
var user = require('../shared/user.js');
Я не понимаю, почему вы не могли просто загружать модели из общего пути.
Если вы хотите повторно использовать пакет Mongoose между другими пакетами NPM, лучший способ сделать это - установить общий пакет в приложении верхнего уровня, а затем использовать его для инициализации других пакетов NPM.
Вы можете использовать этот модуль npm: https://www.npmjs.com/package/mongoose-global
Один из подходов состоит в том, чтобы абстрагировать схему в простой объект 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);