捕获和忽略/抑制猫鼬后保存钩子中的错误

时间:2018-08-01 17:48:29

标签: node.js mongoose

是否可以捕获和忽略Mongoose保存后钩子中的错误,从而导致从文档save调用成功返回(分别是已解决的承诺)?

示例代码:

schema.post('save', function postSave(err, doc, next) {
  if (err.name === 'MongoError' && err.code === 12345) {
    // this does not work the way I'd expect it to
    return next();
  }
  return next(err);
});

上面的钩子仍然导致save调用失败,并显示原始错误(next(null)也不起作用)。我可以通过向next传递一个自定义错误来替换错误,这表明该机制通常是有效的,但这并没有真正帮助我。

Mongoose middleware docs包含一个非常相似的示例(请参阅底部的“错误处理中间件”部分),但并未真正解释next回调的预期行为。

对于上下文,我要在实际项目中完成的工作是保存后的中间件挂钩,当遇到重复的键错误时,该挂钩重试保存调用。

1 个答案:

答案 0 :(得分:1)

  

但是,有一种特殊的后期中间件称为“错误处理中间件”,它在发生错误时专门执行。错误处理中间件对于报告错误和使错误消息更具可读性很有用。

我认为在钩子链中为时已晚。似乎pre "save"钩子是检查duplicate keys的好地方吗?在那里您可以出错,然后在您认为合适的情况下重试代码。

error handling middleware实际上更像是一种错误格式化机制。