168 votes

39. Comment éviter l'acidification musculaire?

D’après mon expérience, un serveur php pourrait lever une exception dans le journal ou à l’extrémité serveur, mais node.js bloque tout simplement. Qui entoure mon code avec un try-catch ne fonctionne pas non plus puisque tout est réalisé de façon asynchrone. Je voudrais savoir que tout le monde fait-il dans leurs serveurs de production.

139voto

D'autres réponses sont vraiment fou comme vous pouvez le lire au Nœud de documents propres à http://nodejs.org/docs/latest/api/process.html#process_event_uncaughtexception

si quelqu'un est à l'aide d'autres a déclaré réponses de lecture Nœud Docs Noter que uncaughtException est très brut mécanisme de gestion des exceptions et peut être supprimée dans le futur

Donc après je suis arrivé finalement à ce que le Nœud document lui-même suggère

Ne l'utilisez pas (uncaughtException), d'utiliser des domaines à la place. Si vous n'utilisez uncaughtException, de redémarrer l'application après chaque exception non gérée!

La Solution est de DOMAINE

domain = require('domain'),
d = domain.create();

d.on('error', function(err) {
  console.error(err);
});

pour plus de détails, allez http://shapeshed.com/uncaught-exceptions-in-node/

82voto

hvgotcodes Points 55375

J’ai mis ce code juste sous mon nécessitent des déclarations globales :

fonctionne pour moi. la seule chose que je n’aime pas c’est que je n’obtiens pas autant d’informations que je dirais si j’ai laissé l’écrasement de la chose.

30voto

Sean Bannister Points 755

Comme mentionné ici , vous trouverez `` fournit un message d’erreur plus complète telles que le numéro de ligne qui a provoqué l’erreur :

12voto

Raynos Points 82706

Essayez supervisor

npm install supervisor
supervisor app.js

Ou vous pouvez installer forever à la place.

Tout cela va faire est de récupérer votre serveur quand il se bloque en le redémarrant.

forever peut être utilisée dans le code normalement récupérer tout le processus de l'accident.

L' forever docs avoir des informations solides sur la sortie/erreur de manipulation par programmation.

7voto

Nam Nguyen Points 963

Utilisation de try-catch peut résoudre les erreurs non interceptées, mais dans certaines situations complexes, il ne sera pas faire le travail à droite comme à attraper fonction async. Rappelez-vous que dans le Nœud, tout async les appels de fonctions peuvent contenir une éventuelle application crash de l'opération.

À l'aide de uncaughtException est une solution de contournement, mais il est reconnu comme étant inefficace et est susceptible d'être supprimé dans les versions futures de Nœud, donc ne comptez pas sur elle.

La solution idéale est d'utiliser de domaine: http://nodejs.org/api/domain.html

Pour vous assurer que votre application est en place et fonctionne même votre serveur s'est écrasé, utilisez les étapes suivantes:

  1. utiliser un nœud de cluster à la fourchette de multiples processus par cœur. Donc, si un processus est mort, un autre processus automatique de démarrage. Découvrez: http://nodejs.org/api/cluster.html

  2. domaine d'utilisation pour attraper opération asynchrone au lieu d'utiliser try-catch ou non interceptée. Je ne dis pas que try-catch ou non interceptée est mauvaise pensée!

  3. utilisez toujours/superviseur de surveiller vos services

  4. ajouter démon pour exécuter votre nœud de l'application: http://upstart.ubuntu.com

espérons que cette aide!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X