2つのアプリがあり、それぞれが異なるフォルダーにあり、同じモデルを共有する必要があります。
アプリAのmodelsフォルダーをアプリBのmodelsフォルダーにシンボリックリンクしたいと思います。
アプリAでmongoose.model('Model'、Schema)を呼び出すと、そのアプリのmongoose/mongodb接続に「関連付けられている」という問題が発生しています。
これを管理するための最良の方法に関するヒントはありますか?
このようなことを使用して、マングースインスタンスを共有しています
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」を要求できるようにする
私がここでやったのは、app2 のサブモジュール (Git を使用) として app1 をインポートすることでした。このようにして、モデルを通常どおりインポートし、アプリのデフォルトmongoose
接続に関連付けることができます。
1 つのアプローチは、スキーマを単純な 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);
./shared/models/user.js
./app1/app.js
var user = require('../shared/user.js');
./app2/app.js
var user = require('../shared/user.js');
共有パスからモデルをロードできなかった理由がわかりません。
他の NPM パッケージ間で Mongoose パッケージを再利用する場合、最上位アプリに共有パッケージをインストールし、それを使用して他の NPM パッケージを初期化するのが最善の方法です。
この npm モジュールを使用できます: https://www.npmjs.com/package/mongoose-global