私は次のAPIでマングースを使用してCRUDアプリを作成しています。
- 作成:
save()
- アップデート:
findByIdAndUpdate()
両方の方法でミドルウェアを起動したいと思います。私は試しましpre('save', ...)
pre('validate', ...)
たが、それらは作成ルートに対してのみ起動します。
両方で機能する他の何かがありますか、それともsave()APIを利用するために更新ルートをリファクタリングする必要がありますか?
私は次のAPIでマングースを使用してCRUDアプリを作成しています。
save()
findByIdAndUpdate()
両方の方法でミドルウェアを起動したいと思います。私は試しましpre('save', ...)
pre('validate', ...)
たが、それらは作成ルートに対してのみ起動します。
両方で機能する他の何かがありますか、それともsave()APIを利用するために更新ルートをリファクタリングする必要がありますか?
'save'
ミドルウェアは呼び出しでのみ起動し、save
更新呼び出しでは起動しません。更新がアトミックであるようにドライバーに直接送信されるため、更新のために起動するミドルウェアはありません。
モデルを拡張するサービスでラップし、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は他のサービスの数を通知する必要がないことを確認できます。 。