Mongoose:post hook中的Consume错误

时间:2017-02-09 01:59:42

标签: mongodb express mongoose

我使用Express.js使用MongoDB支持Mongoose个应用。我需要忽略来自MongoDB的重复键错误(错误代码11000)并仍然返回204 HTTP响应。我们的想法是使用post上的save挂钩,使用错误并忽略它。

服务层

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

架构 - 保存挂钩

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)
  }
});

2 个答案:

答案 0 :(得分:1)

next中的Mongoose回调会跟踪名为firstError的内容。这是存储重复键错误等内部错误的地方。这可以防止用户覆盖错误状态并且调用next会导致检查firstError并触发拒绝承诺,即使有人试图呼叫next()next(null)

答案 1 :(得分:0)

如果你想完全忽略它们,我认为你可以在schema.options对象中将emitIndexErrors设置为false。

http://mongoosejs.com/docs/guide.html#emitIndexErrors