Dans node.js readFile () montre comment capturer une erreur, cependant il n'y a pas de commentaire pour la fonction readFileSync () concernant la gestion des erreurs. En tant que tel, si j'essaye d'utiliser readFileSync () quand il n'y a pas de fichier, j'obtiens l'erreur Error: ENOENT, no such file or directory
.
Comment capturer l'exception levée? Le doco n'indique pas quelles exceptions sont levées, donc je ne sais pas quelles exceptions je dois attraper. Je dois noter que je n'aime pas le style générique «attraper toutes les exceptions possibles» des instructions try / catch. Dans ce cas, je souhaite attraper l'exception spécifique qui se produit lorsque le fichier n'existe pas et que j'essaye d'effectuer le readFileSync.
Veuillez noter que j'effectue des fonctions de synchronisation uniquement au démarrage avant de servir les tentatives de connexion, donc les commentaires indiquant que je ne devrais pas utiliser les fonctions de synchronisation ne sont pas obligatoires :-)
la source
fs.existsSync()
comme on peut le voir dans ma nouvelle réponseRéponses:
Fondamentalement,
fs.readFileSync
génère une erreur lorsqu'un fichier n'est pas trouvé. Cette erreur provient duError
prototype et est lancée à l'aidethrow
, par conséquent, le seul moyen d'attraper est avec untry / catch
bloc:Malheureusement, vous ne pouvez pas détecter quelle erreur a été générée simplement en regardant sa chaîne de prototypes:
est le mieux que vous puissiez faire, et ce sera vrai pour la plupart (sinon toutes) des erreurs. Par conséquent, je vous suggère d'aller avec la
code
propriété et de vérifier sa valeur:De cette façon, vous traitez uniquement cette erreur spécifique et relancez toutes les autres erreurs.
Vous pouvez également accéder à la
message
propriété de l'erreur pour vérifier le message d'erreur détaillé, qui dans ce cas est:J'espère que cela t'aides.
la source
EACCES
code doit également être vérifié dans l'instruction if pour le cas où le fichier est là mais ne peut pas être lu en raison d'un manque d'autorisationsJe préfère cette façon de gérer cela. Vous pouvez vérifier si le fichier existe de manière synchrone:
la source
files
avec tout ce que j'ai appris pour faciliter l'async et essayer / attraper.Vous devez attraper l'erreur, puis vérifier de quel type d'erreur il s'agit.
la source
J'utilise un lambda immédiatement appelé pour ces scénarios:
async
version:la source
fs
est un module Nodefs.readFileAsync()
est maintenantfs.readFile()
et ne devrait pas non plus mettre la fonction async à l'intérieur d'un try / catch dans node.js. le try / catch n'obtiendra jamais l'erreur car il est asynchrone. à la place, passez l'erreur dans le rappel et gérez-la ici:fs.readFile('/etc/passwd', (err, data) => { if (err) throw err; console.log(data); });
de: nodejs.org/dist/latest-v12.x/docs/apiEssayez plutôt d' utiliser Async pour éviter de bloquer le seul thread que vous avez avec NodeJS. Vérifiez cet exemple:
Plus tard, vous pouvez utiliser cette fonction asynchrone avec try / catch depuis n'importe quelle autre fonction:
Bon codage!
la source
Le mécanisme JavaScript try… catch ne peut pas être utilisé pour intercepter les erreurs générées par les API asynchrones. Une erreur courante pour les débutants est d'essayer d'utiliser throw dans un rappel d'erreur en premier:
Cela ne fonctionnera pas car la fonction de rappel passée à fs.readFile () est appelée de manière asynchrone. Au moment où le rappel a été appelé, le code environnant, y compris le bloc try… catch, sera déjà sorti. Lancer une erreur dans le rappel peut faire planter le processus Node.js dans la plupart des cas. Si les domaines sont activés ou si un gestionnaire a été enregistré avec process.on ('uncaughtException'), ces erreurs peuvent être interceptées.
référence: https://nodejs.org/api/errors.html
la source