2012-09-28 49 views
10

我有2个应用程序,每个应用程序在不同的文件夹中,他们需要共享相同的模型。如何在两个应用程序之间共享猫鼬模型?

我想符号链接从一个应用模型文件夹中的应用程序B的模型文件夹

我运行到的事实问题,一旦你打电话mongoose.model在(“模型”,架构)应用程序A,它们与该应用程序的猫鼬/ mongodb连接“绑定”。

有没有人有任何提示管理这个最好的方法?

+0

当您说'2 apps'时,是指两个单独的节点实例,每个节点实例都运行其中一个应用程序? – JohnnyHK

+0

是的,完全独立的应用程序,但他们将共享相同的数据库,因此模型。 – evilcelery

+0

然后,你不应该有任何问题,因为每个应用程序将获得自己的一套模型。你看过什么类型的问题? – JohnnyHK

回答

2

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

+3

这听起来很有趣。你能否详细说明一下? –

+0

更多的信息:https://git-scm.com/docs/git-submodule – chemitaxis

1
./shared/models/user.js 

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

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

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

+1

这对我不起作用,对模型的调用很好,但我得到了空的查询!子模块解决方案完美地工作! –

8

你必须通过做这样的事情

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“在其他应用程序中

+0

这是一个很好的答案。一个小小的调整是lib/user.js文件需要使用module.parent.exports.mongoose来引用猫鼬。我通过执行console.log(module.parent)来解决这个问题,它显示了父模块对象图。 –

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

如果你想重用其他NPM包间你的猫鼬包,最好的方法是在顶级应用程序上安装共享软件包,然后使用它来初始化其他NPM软件包。

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

0

一种方法是抽象的架构到一个纯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); 
相关问题