2017-02-09 4 views
0

のを使用しているExpress.jsアプリがあります。私はMongoDBから重複キーエラー(エラーコード11000)を無視し、204のHTTP応答を返す必要があります。考えはsavepostフックを使用することです、エラーを消費し、それを無視してください。マングース:ポストフックのエラーを受け取ります

サービス層

const createMyModel = (req, res, next) => { 
    MyModel.create({...data}) 
    .then(createRes => res.status(204).send()) 
    .catch(next) 
} 

スキーマ - あなたがそれらを完全に無視したい場合は、私はあなたがschema.optionsオブジェクトにfalseにemitIndexErrorsを設定することができると思い

MySchema.post('save', (err, res, next) => { 
    if (!err || (err.name === 'MongoError' && err.code === 11000)) { 
    // The duplicate key error is caught here but somehow 
    // the catch on my service layer gets triggered 
    next(); 
    }else{ 
    next(err) 
    } 
}); 

答えて

1

MongoosenextコールバックはfirstErrorと呼ばれるものを追跡します。これは重複キーエラーのような内部エラーが格納される場所です。これにより、ユーザはエラー状態を無効にすることができず、firstErrorをチェックし、next()またはnext(null)を呼び出そうとしても約束を拒否することになります。

0
+0

emitIndexErrorsについてよく知っているが、それでも問題は解決しない。ポストフックで特定のエラーを1つだけ消費することです。 –

関連する問題