2011-12-19 14 views
0

単純な処理を行うNode.jsアプリケーションがありますが、エラーが発生するたびにサーバーがクラッシュします。Node.js:何らかのエラーが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) 

このようなエラーを防ぐにはどうすればよいですか?たとえば、存在しない変数を呼び出すと、サーバーがクラッシュします。私はこのエラーを理解していますが、時には、デプロイ時にエラーが発生しただけで、サーバーがクラッシュすることがあります。

+1

あなたはtry/catchブロックを持っていますか? –

答えて

2

あなたは、あなたのスクリプトはそうのように、process.on('uncaughtException', callback)と「uncaughtException」を引くことにより、停止していないことを確認することができます

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

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

a += 1; 
+1

注意:これは危険です。そのようなすべてのエラーを捕まえただけでは、アプリの一部が停止したり、悪化したりする可能性があります。コールバックの1つがキャッチされない例外をスローすると、もはや回転しない再帰的なコールバックループを想像してください。 –

関連する問題