Tenter de sérialiser une instance d'erreur à l'aide de JSON.stringify entraîne la création d'un objet vide. Ce comportement provient des descripteurs de propriété cachés de l'erreur.
Pourquoi JSON.stringify échoue :
Les descripteurs de propriété pour les instances d'erreur sont définis avec enumerable: false, empêchant leur les propriétés ne sont pas incluses dans la stringification.
Exploration des propriétés et des descripteurs :
const error = new Error('sample message'); const propertyNames = Object.getOwnPropertyNames(error); propertyNames.forEach(property => console.log(property, Object.getOwnPropertyDescriptor(error, property)));
Output:
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 }
Solution de contournement à l'aide d'Object.getOwnPropertyNames :
Pour inclure les propriétés d'erreur dans stringification, utilisez JSON.stringify(err, Object.getOwnPropertyNames(err)). Cela donne accès à des propriétés non énumérables.
const serializedError = JSON.stringify(error, Object.getOwnPropertyNames(error));
Solutions de contournement supplémentaires :
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3