2012-09-28 50 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); 
相關問題