Express.jsとMongooseを使用して同僚と REST API を開発しています。
一部の MongooseではModel methods、現在リクエストを実行している認証済みユーザーなど、追加のコンテキスト情報ソースとしてオブジェクトstaticsが必要です。Express.js Request
現在行っていることは、の関数のプロトタイピングによってのコンテキストに呼び出さcontextれるカスタム プロパティをアタッチすることです。ModelthisMongooseModel
問題は、厄介なバグに遭遇したことで、インスタンスでModel.methods呼び出された が正常に機能することに気付きました。Model
として実装されている「クラス」でModel.statics呼び出される の場合、スコープはアプリ全体で共有されます。つまり、同時リクエストがある場合、リクエスト処理で非同期動作がある場合、それらは互いの値をオーバーライドします。.Modelsingletonthis.context
今私の質問は次のとおりです。
- and functionsでコンテキストを保持
Express.jsおよびMongooseアクセスするためのベストプラクティスは何ですか?requestModel.staticsModel.methods
もちろん、封じ込めをシミュレートするためのいくつかの可能なハックがあります:
Function.bind()Modelリクエストコンテキストを追加するすべての関数。-> これは、
Model.statics.a()内部的に を呼び出す場合Model.statics.b()、関数に .b()がないことを意味しますthis.context。with() {}オブジェクトでステートメントを使用し、そのスコープ内のrequestすべての関数を呼び出します。Model->これはかなり汚れていて遅いでしょう。
vm標準の Node.js モジュールを使用して、個別のスコープを持つコンテナーを作成します。→(2)と同様、パフォーマンスが大幅に低下します。
何か案は ?前もって感謝します !