首页 > 解决方案 > 在 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 中间件文档包含一个非常相似的示例(请参阅底部附近的“错误处理中间件”部分),但并没有真正解释next回调的预期行为。

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

标签: node.jsmongoose

解决方案


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

我认为在钩子链中这样做为时已晚。看起来pre "save"钩子是检查duplicate keys否的好地方?在那里你可以出错,然后在你认为合适的时候在你的代码中重试。

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


推荐阅读