【问题标题】:Catch and ignore/suppress errors in Mongoose post-save hook在 Mongoose 保存后挂钩中捕获并忽略/抑制错误
【发布时间】:2019-01-09 09:14:47
【问题描述】:

是否可以在 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 回调的预期行为。

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

【问题讨论】:

    标签: node.js mongoose


    【解决方案1】:

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

    我认为在钩子链中执行此操作为时已晚。 pre "save" 钩子似乎是检查duplicate keys 的好地方,不是吗?在那里你可以出错,然后在你的代码中重试你认为合适的。

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

    【讨论】:

    • 预保存钩子不适用于此用例,因为总是有(尽管很小)另一个进程在钩子和实际写入调用之间使用相同键写入文档.当然,在调用代码时显式重试是可行的,但远不如中间件解决方案那么优雅。不过谢谢!你是对的,文档有点暗示这不是一个预期的用例。
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 2013-02-18
    • 2020-04-05
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    相关资源
    最近更新 更多