2011-12-19 4 views
0

J'ai une application Node.js pour faire un traitement simple, cependant, chaque fois qu'il y a une erreur, le serveur tombe en panne.Node.js: Toute erreur se bloque serveur Heroku

2011-12-19T19:27:49+00:00 app[web.1]: node.js:134 
2011-12-19T19:27:49+00:00 app[web.1]:   throw e; // process.nextTick error, or 'error' event on first tick 
2011-12-19T19:27:49+00:00 app[web.1]:  ^
2011-12-19T19:27:49+00:00 app[web.1]: TypeError: Object { customer_id: 4eef8ddb74019b9d4f00001d, 
2011-12-19T19:27:49+00:00 app[web.1]: date: Mon, 19 Dec 2011 19:27:36 GMT, 
2011-12-19T19:27:49+00:00 app[web.1]: callsid: '123', 
2011-12-19T19:27:49+00:00 app[web.1]: _id: 4eef902887e9770100000008 } has no method 'save' 
2011-12-19T19:27:49+00:00 app[web.1]:  at Promise.<anonymous> (/app/src/call.js:137:24) 
2011-12-19T19:27:49+00:00 app[web.1]:  at Promise.<anonymous> (/app/node_modules/mongoose/lib/promise.js:120:8) 
2011-12-19T19:27:49+00:00 app[web.1]:  at Promise.<anonymous> (events.js:64:17) 
2011-12-19T19:27:49+00:00 app[web.1]:  at Promise.emit (/app/node_modules/mongoose/lib/promise.js:59:38) 
2011-12-19T19:27:49+00:00 app[web.1]:  at Promise.complete (/app/node_modules/mongoose/lib/promise.js:70:20) 
2011-12-19T19:27:49+00:00 app[web.1]:  at /app/node_modules/mongoose/lib/query.js:738:28 
2011-12-19T19:27:49+00:00 app[web.1]:  at model.init (/app/node_modules/mongoose/lib/model.js:181:36) 
2011-12-19T19:27:49+00:00 app[web.1]:  at cb (/app/node_modules/mongoose/lib/query.js:736:14) 
2011-12-19T19:27:49+00:00 app[web.1]:  at Array.<anonymous> (/app/node_modules/mongoose/lib/utils.js:394:16) 
2011-12-19T19:27:49+00:00 app[web.1]:  at model.<anonymous> (/app/node_modules/mongoose/lib/document.js:181:5) 

Comment puis-je me protéger de telles erreurs? Par exemple, lorsque j'appelle une variable qui n'existe pas, le serveur se bloque. Je comprends l'erreur mais parfois je remarque seulement l'erreur quand déployé et le serveur plante.

+1

vous avez un bloc try/catch? –

Répondre

2

Vous pouvez vous assurer que votre script ne vous arrêtez pas en attrapant le « uncaughtException » avec process.on('uncaughtException', callback), comme ceci:

process.on('uncaughtException', function (exception) { 
    // handle or ignore error 
    console.log(exception); 
}); 

setInterval(function() { 
    console.log('tick, even after error'); 
}, 1000); 

a += 1; 
+1

méfiez-vous: c'est dangereux. Si vous observez simplement toutes les erreurs de ce type, votre application peut bloquer - ou pire, certaines parties de votre application - imaginer des boucles de rappel récursives qui ne tournent plus si l'une des callbacks renvoie une exception non interceptée. –

Questions connexes