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 中间件文档包含一个非常相似的示例(请参阅底部附近的“错误处理中间件”部分),但并没有真正解释next
回调的预期行为。
对于上下文,我在实际项目中尝试完成的是一个保存后中间件挂钩,它在遇到重复键错误时重试保存调用。
解决方案
但是,有一种特殊的后中间件,称为“错误处理中间件”,专门在发生错误时执行。错误处理中间件对于报告错误和使错误消息更具可读性很有用。
我认为在钩子链中这样做为时已晚。看起来pre "save"
钩子是检查duplicate keys
否的好地方?在那里你可以出错,然后在你认为合适的时候在你的代码中重试。
这error handling middleware
实际上更像是一种错误格式化机制。
推荐阅读
- r - R中的负向后正则表达式
- javascript - 如何使用 d3.js 通过鼠标悬停显示 XY 图表的 x 和 y 坐标
- python - Pytorch RuntimeError:张量a(4)的大小必须与非单维0的张量b(3)的大小相匹配
- python - 在 Python 中使用 lxml 针对 Schematron 验证带有命名空间的 XML
- vba - 如何在更改字段时运行宏,而不是在该字段的原始条目上运行宏?
- python - df.apply(lambda: x.lower()): 'function' 对象没有属性 'lower'
- docker - 如何在 Docker 中构建 dotnet 核心?
- ios - 在 iOS 13 中单击 webview 的链接时它会崩溃
- node.js - Nodejs获取请求读取正文数据
- python - 如何删除 DRF API 密钥中散列密钥中的斜杠,或者有什么方法可以接受 urls.py 中的斜杠?