2017-01-11 14 views
0

私はフロントエンドに渡される前にエラーメッセージがより読みやすくするために、必要な検証エラーを処理しようとしているが動作していないカスタムのエラー処理をマングースされていません。はなぜ

UserSchema 
    .post('save', function (error, doc, next) { 
    console.log(error.errors); 
    if (error.name === 'ValidationError' && error.errors.academicRole.kind === 'required') { 
     console.log('custom error'); 
     next(new Error('Academic Role is required.')); 
    } else { 
     next(error); 
    } 
    }); 

このコードは、ユーザーの原因となりますacademicRoleプロパティが存在しないときに空のオブジェクトであるエラーで呼び出されるセーブコールバック。カスタムメッセージを含むエラーオブジェクトで保存コールバックが呼び出されないのはなぜですか?

答えて

0

検証エラーはpost('validate')フックで確認してください。

検証エラーがある場合、save()メソッドと関連するフックpre( 'save')とpost( 'save')は呼び出されません。

UserSchema 
    .post('validate', function (err, doc, next) { 
    console.log(err.errors); 
    if (err.name === 'ValidationError' && err.errors.academicRole.kind === 'required') { 
     console.log('custom error'); 
     next(new Error('Academic Role is required.')); 
    } else { 
     next(err); 
    } 
    }); 
+0

このコードを使用すると、何も記録されません。 Mongooseの文書はまた、エラーがエラー処理ミドルウェアの下で保存後に処理されたことを示しているようです。 –

+0

私はちょうどドキュメントを見ました。 "#検証は非同期的に再帰的です; Model#saveを呼び出すと、サブ文書の検証も実行されます。エラーが発生した場合、Model#saveコールバックはそれを受け取ります*"。私が理解する限り、エラーは 'post( 'validate')'や 'post( 'save')'フックに現れません。実際には 'save()'メソッド自体に現れます。 [こちらのドキュメント](http://mongoosejs.com/docs/validation.html)を参照してください。 –

+0

ポストバリデートの問題は、私が検証しようとしているバリデータである 'required'バリデータでのみ検証される' undefined'です。 。 –