Comment résoudre les exceptions non interceptées dans Node.js
Exceptions non interceptées dans Node.js
La gestion des exceptions non interceptées dans Node.js n'est pas facile
Table des matières :
Problèmes causés par des exceptions non interceptées
Comment gérer les exceptions non interceptées
Une application avec aucune exception non détectée
Casser votre application
Faire semblant de ne pas voir l'erreur ?
L'application plante, imprime le journal, puis redémarre
Utiliser le module Domaines [Note du traducteur : désormais obsolète]
Conclusion
1. Problèmes causés par les exceptions non détectées
En raison de la nature monothread de Node.js, les exceptions non détectées constituent un problème pour le développement d'applications. Problèmes à noter au cours du processus. Node.js suit un modèle de rappel d'erreurs en premier, puis de données. On voit souvent cet exemple : lorsque la fonction de rappel renvoie un objet d'erreur, l'erreur est renvoyée immédiatement.
var fs = require('fs'); fs.readFile('somefile.txt', function (err, data) { if (err) throw err; console.log(data); });
Si vous exécutez ce programme et en supposant que vous n'avez pas le fichier somefile.txt
, une erreur sera générée.
Error: ENOENT, open 'somefile.txt'
Cela entraînera un blocage du processus et affectera l'ensemble de l'application.
Ceci est intentionnel, Node.js n'a pas l'intention de séparer votre application de votre service.
2. Comment gérer les exceptions non interceptées
Quelle est la meilleure façon de gérer les exceptions non interceptées ? Il existe des tonnes de façons :
Votre application ne devrait pas avoir d'erreurs non détectées, c'est fou.
C'est aussi fou que vous deviez laisser votre application trouver des exceptions non interceptées après un crash, puis les corriger.
Fermer les yeux sur une erreur et ne pas y faire face, c'est ce que font la plupart des gens, et ça craint.
Vous devez laisser votre application imprimer le journal des erreurs après un crash, puis redémarrer le processus en utilisant quelque chose comme
upstart
,forever
,monit
. Cette méthode est très pratique.[Note du traducteur : désormais obsolète] Vous devriez commencer à utiliser le module Domaines pour gérer les erreurs. C'est la seule voie à suivre, bien qu'il s'agisse encore d'une fonctionnalité expérimentale de Node.js.
Développons maintenant ces méthodes en détail.
3. Une application sans exceptions non capturées
Le concept "d'une application sans exceptions non capturées" me semble bizarre, toute application aura des exceptions à un moment donné et il peut s'agir d'une exception non capturée. Si vous insistez sur ce point et envoyez des erreurs aux utilisateurs, alors je pense que vous devriez être prêt à recevoir un appel téléphonique au milieu de la nuit et à être informé que le service est tombé en panne.
4. Faites planter votre application
La seule défense que je peux trouver dans cet avis est l'argument d'échec rapide. Vous allez réparer votre application rapidement si elle est indisponible s'il s'agit d'une application sans exceptions non détectées. laisser le refus de votre application équivaut à une acceptation. Mais vous imposez toujours la gestion des exceptions à vos utilisateurs (pardonnez-moi de ne pas comprendre comment traduire ce paragraphe. Si vous avez de bonnes idées, veuillez me contacter dès que possible ! )
5. Faites comme si vous ne voyiez pas l'erreur ?
Beaucoup de gens font cela :
<p style="margin-bottom: 7px;">process.on('uncaughtException', function (err) {<br/> console.log(err);<br/>})<br/></p>
C'est mauvais lorsqu'une exception non interceptée est levée, vous devez réaliser que votre application est dans un état anormal. Dans ce cas, vous ne pouvez pas exécuter votre programme. de manière fiable.
Le Felix Geisendörfer
qui a initialement proposé l'événement process.on propose maintenant de le supprimer.
6. L'application plante, imprime le journal, puis redémarre
Avec cette méthode, vous pouvez faire planter votre application immédiatement lorsqu'une exception non interceptée se produit, puis utiliser forever
ou upstart
comme ça L'outil redémarre (presque) instantanément. Node.js écrira l'exception dans STERR
afin que vous puissiez rediriger l'exception vers un fichier journal et en récupérer l'erreur plus tard. L'inconvénient de cette approche est qu'elle ne fournit pas un moyen élégant de gérer les pannes de courant temporaires ou les scénarios de panne de réseau i/o
dans lesquels l'erreur se produit en dehors de votre code. Quel outil ! — Redémarrez l'application et réessayez. Si vous combinez cette stratégie avec i/o
, le nœud peut redémarrer automatiquement tous les enfants qui génèrent une erreur et imprimer l'erreur. cluster module
var cluster = require('cluster');var workers = process.env.WORKERS || require('os').cpus().length;if (cluster.isMaster) { console.log('start cluster with %s workers', workers); for (var i = 0; i < workers; ++i) { var worker = cluster.fork().process; console.log('worker %s started.', worker.pid); } cluster.on('exit', function(worker) { console.log('worker %s died. restart...', worker.process.pid); cluster.fork(); }); } else { var http = require('http'); http.createServer(function (req, res) { res.end("Look Mum! I'm a server!\n"); }).listen(3000, "127.0.0.1"); } process.on('uncaughtException', function (err) { console.error((new Date).toUTCString() + ' uncaughtException:', err.message) console.error(err.stack) process.exit(1) })
[Note du traducteur : désormais obsolète] Domains
est une fonctionnalité expérimentale ajoutée dans la version Domains
, qui fait que la gestion des exceptions devient plus souple et plus précis. Ce qui suit est un exemple où le fichier n'existe pas. En utilisant Node.js v0.8
, vous pouvez déclencher un événement d'erreur pour un domaine spécifique. Vous pouvez également utiliser une gestion différente des exceptions pour différents scénarios. Cela vous permet de gérer les exceptions en conséquence en fonction de l'endroit où elles se produisent. Si quitter un processus revient à casser une noix avec un marteau, c'est comme un scalpel précis vous donnant un contrôle total sur le programme. domains
var domain = require('domain');var d = domain.create();var fs = require('fs'); d.on('error', function(err) { console.error(err); }); d.run(function() { fs.readFile('somefile.txt', function (err, data) { if (err) throw err; console.log(data); }); });
8. 结论
如果你在产品环境运行 Node.js 你起码应该对如何处理异常有一个想法。目前为止我相信当异常被抛出时,大多数人只是重启应用(也许是优雅地重启),Domains
为应用提供了一种更聪明的面对异常的能力,异常处理器可能会选择简单的清理、关闭某些连接,最坏的情况下,退出进程。关键点就在于你有了选择。
我抛下榔头拾起手术刀的时候应该已经到了
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment configurer le démarrage du clavier sur la carte mère de Gigabyte Tout d'abord, s'il doit prendre en charge le démarrage du clavier, il doit s'agir d'un clavier PS2 ! ! Les étapes de configuration sont les suivantes : Étape 1 : appuyez sur Suppr ou F2 pour entrer dans le BIOS après le démarrage, et entrez dans le mode avancé (avancé) du BIOS. Les cartes mères ordinaires entrent dans le mode EZ (facile) de la carte mère par défaut. pour appuyer sur F7 pour passer au mode avancé. Les cartes mères de la série ROG entrent dans le BIOS par défaut (nous utilisons le chinois simplifié pour démontrer) Étape 2 : Sélectionnez - [Avancé] - [Gestion avancée de l'alimentation (APM)] Étape 3 : Recherchez l'option [Réveil par le clavier PS2] Étape 4 : Cette option est désactivée par défaut. Après avoir tiré vers le bas, vous pouvez voir trois options de configuration différentes, à savoir appuyer sur [barre d'espace] pour allumer l'ordinateur, appuyer sur groupe.

Comment utiliser WebSocket et JavaScript pour mettre en œuvre un système de reconnaissance vocale en ligne Introduction : Avec le développement continu de la technologie, la technologie de reconnaissance vocale est devenue une partie importante du domaine de l'intelligence artificielle. Le système de reconnaissance vocale en ligne basé sur WebSocket et JavaScript présente les caractéristiques d'une faible latence, d'un temps réel et d'une multiplateforme, et est devenu une solution largement utilisée. Cet article explique comment utiliser WebSocket et JavaScript pour implémenter un système de reconnaissance vocale en ligne.

WebSocket et JavaScript : technologies clés pour réaliser des systèmes de surveillance en temps réel Introduction : Avec le développement rapide de la technologie Internet, les systèmes de surveillance en temps réel ont été largement utilisés dans divers domaines. L'une des technologies clés pour réaliser une surveillance en temps réel est la combinaison de WebSocket et de JavaScript. Cet article présentera l'application de WebSocket et JavaScript dans les systèmes de surveillance en temps réel, donnera des exemples de code et expliquera leurs principes de mise en œuvre en détail. 1. Technologie WebSocket

Comment activer la connexion directe de la carte graphique indépendante du Shenzhou Xuanlong m7 Pour activer la fonction de connexion directe de la carte graphique indépendante du Shenzhou Xuanlong m7, vous pouvez suivre les étapes suivantes : 1. Tout d'abord, assurez-vous d'avoir installé le pilote de la carte graphique indépendante. Vous pouvez vous rendre sur le site officiel de Shenzhou ou sur le site officiel du fabricant indépendant de la carte graphique pour télécharger et installer le dernier pilote adapté à votre modèle de carte graphique. 2. Sur le bureau de l'ordinateur, cliquez avec le bouton droit sur un espace vide et sélectionnez « Panneau de configuration NVIDIA » dans le menu contextuel (s'il s'agit d'une carte graphique AMD, sélectionnez « Paramètres AMDradeon »). 3. Dans le panneau de configuration, recherchez « Paramètres 3D » ou une option du même nom et cliquez pour entrer. 4. Dans « Paramètres 3D », vous devez rechercher « Paramètres globaux » ou une option du même nom. Ici, vous pouvez spécifier l'utilisation d'un nom unique

JavaScript et WebSocket : Construire un système efficace de prévisions météorologiques en temps réel Introduction : Aujourd'hui, la précision des prévisions météorologiques revêt une grande importance pour la vie quotidienne et la prise de décision. À mesure que la technologie évolue, nous pouvons fournir des prévisions météorologiques plus précises et plus fiables en obtenant des données météorologiques en temps réel. Dans cet article, nous apprendrons comment utiliser la technologie JavaScript et WebSocket pour créer un système efficace de prévisions météorologiques en temps réel. Cet article démontrera le processus de mise en œuvre à travers des exemples de code spécifiques. Nous

Tutoriel JavaScript : Comment obtenir le code d'état HTTP, des exemples de code spécifiques sont requis Préface : Dans le développement Web, l'interaction des données avec le serveur est souvent impliquée. Lors de la communication avec le serveur, nous devons souvent obtenir le code d'état HTTP renvoyé pour déterminer si l'opération a réussi et effectuer le traitement correspondant en fonction de différents codes d'état. Cet article vous apprendra comment utiliser JavaScript pour obtenir des codes d'état HTTP et fournira quelques exemples de codes pratiques. Utilisation de XMLHttpRequest

En tant que marque de sport de renommée mondiale, les chaussures Nike ont attiré beaucoup d'attention. Cependant, il existe également un grand nombre de produits contrefaits sur le marché, notamment de fausses boîtes à chaussures Nike. Distinguer les véritables boîtes à chaussures des fausses est crucial pour protéger les droits et les intérêts des consommateurs. Cet article vous fournira quelques méthodes simples et efficaces pour vous aider à faire la distinction entre les vraies et les fausses boîtes à chaussures. 1 : Titre de l'emballage extérieur En observant l'emballage extérieur des boîtes à chaussures Nike, vous pouvez découvrir de nombreuses différences subtiles. Les véritables boîtes à chaussures Nike contiennent généralement des matériaux en papier de haute qualité, doux au toucher et sans odeur âcre évidente. Les polices et les logos des boîtes à chaussures authentiques sont généralement clairs et détaillés, et il n'y a pas de flou ni d'incohérence de couleur. 2 : titre de marquage à chaud du logo. Le logo sur les boîtes à chaussures Nike est généralement imprimé à chaud. La partie de marquage à chaud sur la boîte à chaussures authentique s'affichera.

Quelle est la résolution du Savior Y7000P lors de la lecture de CF ? La résolution du Savior Y7000P lors de la lecture de CF est de 1920*1080. Cet ordinateur étant équipé d'une carte graphique GTX1650 et d'un processeur i5-9300H, ses performances sont relativement bonnes et suffisantes pour répondre aux besoins de jeux comme CF. Dans le même temps, 1920*1080 est la résolution actuelle des moniteurs d'e-sport grand public, et la qualité et la clarté de l'image sont suffisantes. De plus, si certains joueurs ont des exigences plus élevées, vous pouvez réduire de manière appropriée les paramètres de qualité d'image du jeu pour obtenir une expérience de jeu plus fluide. Afin de profiter d'une expérience visuelle plus claire, vous pouvez régler la résolution du Savior y7000p à 2560*1400. De cette façon, vous pourrez profiter d’un affichage d’image de meilleure qualité. Equipé du modèle Savior Y7000P 2022
