いくつかのモデルを定義し、グローバルな Mongoose 接続を作成するアプリケーションがあるとします ( mongoose.connect(...)
)。node_modules
アプリは、ディレクトリ内のモジュールによって定義されたいくつかのモデルにも依存しています。私が直面している問題は、アプリケーションと別のモジュールが同じグローバル接続オブジェクトを共有していないことです。
じゃ、いいよ。モジュールにモデルをエクスポートさせるのではなく、スキーマをエクスポートするだけで、メイン アプリケーションはそれを接続に登録できます。アプリには次のようなものがあります。
var SomeSchema = require('somemodule').SomeSchema;
mongoose.model('SomeModel', SomeSchema);
残念ながら、これも機能していません。モデルが登録されると、Mongoose は指定されたスキーマがmongoose.Schema
( here ) のインスタンスであるかどうかを確認します。(別のモジュールで) が定義されると、モジュールのローカル依存関係ツリーから必要な場所でSomeSchema
スキーマが作成されます。アプリケーションがスキーマを登録するとき、アプリケーションの依存関係から必要なものを使用します。mongoose の 2 つのコピーは同じオブジェクトではないため、指定されたスキーマはインスタンスではなく、エラーがスローされます。new mongoose.Schema({ ... })
mongoose
mongoose
mongoose.Schema
ここでお勧めはありますか?考えられる解決策の 1 つは、スキーマを受け入れてすべてのパス、メソッドなどを追加する「プラグイン」関数をモジュールに作成させることだと考えていました。メイン アプリは空のスキーマを作成し、プラグインを追加します。何かのようなもの:
var somePlugin = require('somemodule').somePlugin;
var SomeSchema = new mongoose.Schema();
SomeSchema.plugin(somePlugin);
mongoose.model('SomeModel', SomeSchema);
代替手段はありますか?
どうもありがとう。