1

次のようなモデルに (異なるファイルに) 2 つのフックがあります。

model.pre('save', function(next) {
    if (this.isModified('password'))
        this.set('password, hash(this.get('password'))
    next()
})

model.pre('save', function() {
    if (this.isNew)
        this.set('password', generatePassword())
    next()
})

私の最初のフックはモジュールからのものです。それは最初でなければならず、変更することはできません。パスワード フィールドが変更されていることを確認し、変更されている場合はハッシュします。2 番目のフックは私が作成したもので、ユーザーの作成時にランダムに生成されたパスワードを設定しています。

私の問題は、最初のフックが 2 番目のフックの前に渡されるため、パスワードをハッシュしないことです。this.save2 番目のフックを呼び出そうとしましたisModifiedが、それを行うと false になります。

hash最初のフックの関数を 2 番目のファイルにコピーして機能させる必要がありましたが、完全にはほど遠いものです。

マングースでフックを優先順位で実行する方法があるかどうか知りたいですか?ありがとう。

4

1 に答える 1

1

pre save残念ながら、マングースはフックやその他のタイプのフックに優先順位を付ける手段を提供していません。post validateただし、特定のユースケースでは、フックの使用を検討する必要がある場合があります。

model.post('validate', function (doc) {
    if (doc.isNew) {
       doc.set('password', generatePassword());
    }
});

post validateフックは、ドキュメントが保存される前、およびユーザー定義のpre saveフックの前に実行されます。

于 2014-07-22T11:54:53.963 に答える