我有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