Sha*_*ika 5 javascript node.js express reactjs react-native
我想在我的节点应用程序中抛出一个错误,如下所示。
throw new Error({ status: 400, error: 'Email already exists' });
Run Code Online (Sandbox Code Playgroud)
这给了我以下输出。
Error: [object Object]
Run Code Online (Sandbox Code Playgroud)
我无法访问此错误对象的属性。我在这里做错了什么?
jfr*_*d00 15
Error对象的构造函数需要一个字符串,而不是一个对象(这就是您的方案不起作用的原因)。
在创建 Error 对象后,您可以自由地将您自己的自定义属性添加到它。
let err = new Error('Email already exists');
err.status = 400;
err.whateverElse = someValue;
throw err;
Run Code Online (Sandbox Code Playgroud)
错误对象上的标准属性(出于某种原因我不知道)不可枚举,因此它们不会出现在某些上下文中(即使它们存在)。您使用上述简单赋值添加的任何新属性都将是可枚举的。
仅供参考,您可以在多个地方执行此操作,您还可以将Error对象子类化并为您的子类提供一个构造函数,该构造函数接受您想要给它的任何参数。然后,该构造函数可以super(msg)从构造函数参数调用并将其自己的属性添加到错误对象中。
这[object Object]是您的消息是因为您正在尝试将错误对象转换为字符串,并且该对象的默认字符串表示形式是[object Object]. 如果您尝试在字符串中使用错误对象,则会发生这种情况,例如:
console.log('Error: ' + err);
Run Code Online (Sandbox Code Playgroud)
相反,您应该console.log()像这样传递整个对象:
console.log('Error:', err);
Run Code Online (Sandbox Code Playgroud)
并且,console.log()获取整个对象并可以显示其属性。
你可以尝试使用以下cause属性:
TS目前关于它的值类型不准确,官方正在讨论解决这个问题。
try {
throw new Error('Email already exists', {
cause: { status: 400 }
});
} catch(e) {
console.log(e); // Error('Email already exists')
console.log(e.cause) // { status: 400 }
}
Run Code Online (Sandbox Code Playgroud)
或使用自定义属性抛出 Error 实例
try {
const error = new Error('Email already exists');
error.status = 400;
throw error;
} catch(e) {
console.log(e); // Error('Email already exists')
console.log(e.status) // 400
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5021 次 |
| 最近记录: |