Bonjour, Habr!
Le sujet de la gestion des erreurs en JavaScript se pose non seulement pour chaque débutant, mais aussi pour un développeur chevronné. Je constate que le sujet est déjà assez éculé, je vais donc me permettre de résumer dans un bref résumé tout ce qui est vraiment efficace et testé au combat par moi, collÚgues et gourous de l'informatique.
Donc, pour que vous compreniez quelle est l'essence et s'il y a quelque chose de nouveau pour vous, voici la structure de la note:
Erreur JavaScript?
Méthodes de traitement des erreurs du béton armé
Faciliter notre vie
Erreurs de dépendance
Erreur JavaScript?
Sans plonger dans l'Ă©tymologie d'une erreur en JavaScript, caractĂ©risons-la de maniĂšre abstraite, car l'objet d'erreur lui-mĂȘme dans JS n'est pas complĂštement standardisĂ©.
Une erreur dans JS est de "lancer" une exception. L'exception doit ĂȘtre gĂ©rĂ©e par le programme, sinon l'interprĂ©teur nous ramĂšnera Ă l'endroit oĂč cette exception a Ă©tĂ© levĂ©e. Par dĂ©faut, une exception renvoie un objet Error.
Peu importe si vous Ă©crivez Frontend ou Backend, il n'y a qu'une seule approche pour la gestion: attraper l'exception malheureuse et la gĂ©rer. Tout doit ĂȘtre traitĂ©, en particulier dans la production.
Ăclairons immĂ©diatement quelques situations non standard (comme n'importe qui):
erreur extérieure au programme,
erreur de terminal.
L'erreur de terminal est le code d'erreur renvoyé par le systÚme d'exploitation ou le démon.
, .
, .. , , .
â ?
, :
, , . , â JavaScript, Typescript.
, , Error:
, , , .
. , â 80% . 20% , â , , â .
, . , TDD E2E, , , :
, ;
(, , , ..);
(, , ..);
-;
;
/ .
. , , , , . , - .
â , . .
SOLID DRY, (middleware) , . Middleware , . .
, : , JavaScript? .
tryâŠcatch, .
:
// ...
const middlewareRequest = async (req) => {
try {
const { data } = await axios.get(req);
return data;
} catch (err) {
throw new Error(err);
}
}
// ...
, tryâŠcatch, « », DRY , .
:
// ...
const wrapEventWithExcpetionHandler = (middleware) => (e) => {
const { error } = e; // ,
if (error) {
throw new Error(error);
}
try {
return middleware(e);
} catch (err) {
throw new Error(err);
}
}
window.addEventListener('mousemove', wrapEventWithExceptionHandler(middlewareGlobalMouseMove));
// ...
, , , , .
, «» .
, : , , . , , , .
?
â . â , «» . , .
// ...
/* console.log */
/*
, ,
*/
console.log('Check:\r\n username - %s\r\n age - %i\r\n data - %o', 'Mike', 23, {status: 'registered'});
/*
Check:
username - Mike
age - 23
data - {status: "registered"}
*/
/* */
console.table([{username: 'Mike', age: 23}, {username: 'Sarah', age: 46}]);
/* */
console.dir(document.body.childNodes[1]);
// ...
, , (, , ..), , .
1. : , . log4js. , , .
2. DevTools! . , â , . Source. , . .
3. .
4. , , (. ).
, , , .
JS, .
, , . , ( ).
Graphana, , .. JavaScript, , .
, .
, .. . ? :
. console (log, warn, error, info), (. log4js). , , .
production/development/test source-map -, , .
, , Pull Request. Fork , , .
, babel. babel AST, JavaScript . , , , , . , , , , .
Ci-dessus, nous avons considéré des méthodes de gestion des erreurs tout à fait standard, et également présenté des exemples de techniques avec du code pour les packages populaires. De plus, il existe des outils pour automatiser la collecte et le traitement des erreurs. Pour plus d'informations, lisez les liens.
Combinez plusieurs mĂ©thodes et faites confiance Ă des projets rĂ©putĂ©s. Assurez-vous de vous connecter pendant le dĂ©veloppement, les points d'arrĂȘt aident uniquement Ă comprendre le problĂšme dans un cas spĂ©cifique, mais ne sont pas une solution.
Auteur: Rishat Gabaidullov, chef du groupe de pratique Frontend chez Reksoft.