Попытка сериализовать экземпляр ошибки с помощью JSON.stringify приводит к созданию пустого объекта. Такое поведение возникает из-за скрытых дескрипторов свойств ошибки.
Почему JSON.stringify не работает:
Дескрипторы свойств для экземпляров ошибок задаются с помощью enumerable: false, предотвращая их свойства от включения в строковую структуру.
Изучение свойств и Дескрипторы:
const error = new Error('sample message'); const propertyNames = Object.getOwnPropertyNames(error); propertyNames.forEach(property => console.log(property, Object.getOwnPropertyDescriptor(error, property)));
Вывод:
stack { get: [Function], set: [Function], enumerable: false, configurable: true } arguments { value: undefined, writable: true, enumerable: false, configurable: true } type { value: 'custom message', writable: true, enumerable: false, configurable: true } message { value: 'custom message', writable: true, enumerable: false, configurable: true }
Обходное решение с использованием Object.getOwnPropertyNames:
Чтобы включить свойства ошибки в стрингификация, используйте JSON.stringify(err, Object.getOwnPropertyNames(err)). Это обеспечивает доступ к неперечисляемым свойствам.
const serializedError = JSON.stringify(error, Object.getOwnPropertyNames(error));
Дополнительные обходные пути:
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3