2017-10-30 4 views
0

mongodbのデータ操作を行うためにmonkhttps://automattic.github.io/monk/)を使用しています。私は2つのmanagerhttps://automattic.github.io/monk/docs/manager/)のインスタンスを作成するまでそれがうまく機能別の僧侶のマネージャインスタンスに異なるミドルウェアを実装するにはどうすればいいですか?

モンクはmiddleware機構を有し、そして私たちは、単に必要なだけのミドルウェアを追加するaddMiddlewareを呼び出すことができます(https://automattic.github.io/monk/docs/middlewares.html)。 2つのmiddlewaresはお互いに違反しているようです。

したがって、仮説を確認するために簡単なテストを作成します。ここ はテストです:

let db = monk('mongodb://localhost/test') 
    let softDb = monk('mongodb://localhost/other') 
    console.error(db._collectionOptions.middlewares === softDb._collectionOptions.middlewares) 

そして、私の前の仮説として、それはtrueをもたらします。イベントdbsoftDbは異なるオブジェクトですが、同じ_collectionOptions.middlewaresを共有しているようです。おそらく修道士の開発者はsingletonパターンを実装しています。

私の質問は:どのように私はこのsoftDbdbmiddlewaresの異なるセットを持って作ることができますか?

ありがとうございます。

答えて

0

回避策が見つかりました。これは正式に認可されたソリューションではありません。私はまだより良いソリューションを模索しています。だから、あなたの誰かがより良い解決策を見つけたら、私はあなたの答えを承認するでしょう。

softDbdbの両方が同じミドルウェアセットを共有しているため、db._collectionOptions.middlewaresを深くクローンして再割り当てします。ディープクローニングの目的で、私はこのパッケージを使用します:https://www.npmjs.com/package/clone

ソリューションは、以下のようになります。

let clone = require('clone') 

let db = monk('mongodb://localhost/test') 
db._collectionOptions.middlewares = clone(db._collectionOptions.middlewares) 

let softDb = monk('mongodb://localhost/other') 
softDb._collectionOptions.middlewares = clone(softDb._collectionOptions.middlewares) 

// Here I can add different set of middlewares to db and softDb 
// The middlewares of both manager will be independent to each other 

console.error(db._collectionOptions.middlewares === softDb._collectionOptions.middlewares) 
// Now, this will yield `false` 

あなたがマネージャーのインスタンスを作成した後、すぐにミドルウェアをコピーする必要があることに注意することが重要です。

私は、この解決策を嫌う人もいることを知っています。したがって、この回答を投票するよりも、代わりにより良い解決策を提供してください。

関連する問題