2

私は次のAPIでマングースを使用してCRUDアプリを作成しています。

  • 作成:save()
  • アップデート:findByIdAndUpdate()

両方の方法でミドルウェアを起動したいと思います。私は試しましpre('save', ...) pre('validate', ...)たが、それらは作成ルートに対してのみ起動します。

両方で機能する他の何かがありますか、それともsave()APIを利用するために更新ルートをリファクタリングする必要がありますか?

4

2 に答える 2

6

'save'ミドルウェアは呼び出しでのみ起動し、save更新呼び出しでは起動しません。更新がアトミックであるようにドライバーに直接送信されるため、更新のために起動するミドルウェアはありません。

于 2013-02-22T14:16:55.803 に答える
0

モデルを拡張するサービスでラップし、events.EventEmitterそのサービスを使用してモデルの更新を実行し、emitこれが発生したときにイベントを発生させると、それらの更新への応答に関心のあるすべての関数がモデルに登録できます。

これ以外に、データベース呼び出しの実行時にミドルウェアを呼び出す方法はこれまでありません。

例として、次のようなものがあります。

function FooService() {
    var self = this
    var Foo = require('./path/to/foo/module')    

    this.edit = function(id, changes) {
         Foo.findByIdAndUpdate(id, changes, function(err) {
              if (!err) {
                  self.emit('FooUpdated', id)
              }
         })
    }
}

util.inherits(FooService, events.EventEmitter)
module.exports = new FooService()

このように、誰かがいつfoo更新されるかを知りたい場合は、サービスを要求して次のことを行うことができます。FooService.on('FooUpdated', function(id){...})

これは、参照を更新したり非正規化したりする必要がある場合にうまく機能します。そのサービスを使用すると、何をしても常にイベントがトリガーされ、Fooは他のサービスの数を通知する必要がないことを確認できます。 。

于 2014-03-09T21:06:51.633 に答える