我有2个应用程序,每个应用程序在不同的文件夹中,他们需要共享相同的模型。如何在两个应用程序之间共享猫鼬模型?
我想符号链接从一个应用模型文件夹中的应用程序B的模型文件夹
我运行到的事实问题,一旦你打电话mongoose.model在(“模型”,架构)应用程序A,它们与该应用程序的猫鼬/ mongodb连接“绑定”。
有没有人有任何提示管理这个最好的方法?
我有2个应用程序,每个应用程序在不同的文件夹中,他们需要共享相同的模型。如何在两个应用程序之间共享猫鼬模型?
我想符号链接从一个应用模型文件夹中的应用程序B的模型文件夹
我运行到的事实问题,一旦你打电话mongoose.model在(“模型”,架构)应用程序A,它们与该应用程序的猫鼬/ mongodb连接“绑定”。
有没有人有任何提示管理这个最好的方法?
我最终做的是在app2中导入app1作为子模块(使用Git)。通过这种方式,模型可以正常导入,并与应用程序的默认mongoose
连接关联。
这听起来很有趣。你能否详细说明一下? –
更多的信息:https://git-scm.com/docs/git-submodule – chemitaxis
./shared/models/user.js
./app1/app.js
var user = require('../shared/user.js');
./app2/app.js
var user = require('../shared/user.js');
我不明白你为什么不能从一个共享路径加载模型。
这对我不起作用,对模型的调用很好,但我得到了空的查询!子模块解决方案完美地工作! –
你必须通过做这样的事情
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“在其他应用程序中
这是一个很好的答案。一个小小的调整是lib/user.js文件需要使用module.parent.exports.mongoose来引用猫鼬。我通过执行console.log(module.parent)来解决这个问题,它显示了父模块对象图。 –
我的共享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);
如果你想重用其他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);
当您说'2 apps'时,是指两个单独的节点实例,每个节点实例都运行其中一个应用程序? – JohnnyHK
是的,完全独立的应用程序,但他们将共享相同的数据库,因此模型。 – evilcelery
然后,你不应该有任何问题,因为每个应用程序将获得自己的一套模型。你看过什么类型的问题? – JohnnyHK