2017-12-01 12 views
0

Mongooseモデルの検証に関する質問があります。私はそれらが有用であるとは思いません。私は新しいモデルを作成していた場合Mongooseモデルによる検証

、私のコードは、新しいデータを作成して

const model = new Comment(commentJson); 
const error = model.validateSync(); 
assert.ok(error, error.errors); 

で、検証がやや便利です。しかし、既存のモデルを更新してコードを検討してください。

Comment.findByIdAndUpdate(id, commentJson); 

上記のコードでは、モデルの検証にチャンスがありません。私は現在のモデルを取得し、それをcommentJsonで更新し、次にモデルの検証を行うことができます。しかし、コードは少し醜いようです。

代わりに、私はマングース検証に頼るのではなく、私自身のアサート文を書くことにもっと誘惑を感じます。更新のためにデータベースを2回叩くことなく、マングースを使ってバリデーションを行う方法はありますか?ありがとう。

+1

は、あらかじめアップデートされたフックが役立ちます – sidgate

答えて

1

私はこれを使用します。マングースは、ドキュメントを更新すると

try { 
    let updatedComment = await Comment.findByIdAndUpdate(
    id, 
    commentJson, 
    { 
     new: true, 
     runValidators: true 
    } 
); 

    // Deal with result. 
    console.log(updatedComment); 
} catch (err) { 
    // Deal with error. 
    console.log(err); 
} 

が、それは、モデルのスキーマに対して検証を実行します。検証が失敗した場合、catchブロックはそれを処理します。

またはコールバックを持つあなたがしたい場合:save()create()を呼び出すときに

Comment.findByIdAndUpdate(
    id, 
    commentJson, 
    { 
    new: true, 
    runValidators: true 
    }, (err, updatedComment) => { 
    if (err) throw err; 

    console.log(updatedComment); 
    } 
); 

マングースは、一般的に、自動的にバリデータを実行します。私は多くの人が前に手作業でバリデーターを実行しているのを見たことはないと思う。更新機能の場合、バリデータはデフォルトでオフになっています。 を設定するとオンになります。 hereおよびhereを参照してください。

+0

ありがとうございます。それは本当にきれいです。 – vijayst