在猫鼬错误函数中找不到名称属性

The*_*age 1 javascript mongoose mongodb node.js express

I\xe2\x80\x99m 尝试为 mongoose CastError创建错误处理函数。错误对象不包含指示错误类型的名称字段,因此我可以运行 if 语句来检查错误类型。猫鼬错误对象

\n

Div*_*rya 6

我曾经遇到过同样的错误。

在猫鼬错误处理中间件中访问 err.name 返回未定义。

我发现 err.name 仅当您使用从 mongoose 返回的原始 err 对象时才有效。

如果您通过像这样解构来创建对象的副本:

let error = {...err};
Run Code Online (Sandbox Code Playgroud)

这不会包含 name 属性。作为修复,您可以执行以下操作:

let error = {...err, name: err.name};
Run Code Online (Sandbox Code Playgroud)

它应该有效。

我不知道为什么会发生这种情况,但如果有人知道,请告诉我!希望这对您有帮助。

  • 当您使用“{ ...sourceObj }”语法创建对象的副本时,您必须记住两件事:(1)您正在创建浅表副本,(2)您将仅复制可枚举属性。`Error.prototype.name` 不可枚举,因此它不会被复制到新对象中。 (4认同)