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.
Réponses
Trop de publicités?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/
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 :
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.
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:
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
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!
utilisez toujours/superviseur de surveiller vos services
ajouter démon pour exécuter votre nœud de l'application: http://upstart.ubuntu.com
espérons que cette aide!