2011-12-19 4 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

주의 : 위험합니다. 이와 같은 모든 오류를 막 잡아 내면 앱이 앱의 일부를 멈추게하거나 더 악화시킬 수 있습니다. 콜백 중 하나가 캐치되지 않는 예외를 throw하면 더 이상 돌지 않을 재귀 콜백 루프를 상상해보십시오. –

관련 문제