토이 프로젝트야 에러 처리가 미숙해도 상관 없지만 운영하는 서비스가 에러 처리가 미숙하면 사용자 경험에 좋지 않다.
nodejs 로 에러 처리를 정리한 사항을 공유한다.
function someAction(req, res){
// some error occur
res.json(400, {'message':'some error occur'});
}
가장 손쉽지만 공통 로직을 추가하고 싶을때 중복 코드가 많이 발생한다.
expressjs 에서 에러 핸들러를 등록할 수 있다.
/// error handlers
app.use(function(err, req, res, next) {
var statusCode = err.status || 500;
var errorResult = {
message: err.message,
error: isDevelopment ? err : {}
};
if(utils.isApi(req.originalUrl)) { // api 요청인지 아닌지 구분
res.json(statusCode, errorResult);
} else {
var errorRender;
switch(statusCode) {
case 401:
errorRender = '401';
break;
case 403:
errorRender = '403';
break;
case 404:
errorRender = '404';
break;
default:
errorRender = '500';
break;
}
errorResult.callbackURL = encodeURIComponent(req.originalUrl);
errorResult.layout = 'errors/default';
res.render('errors/' + errorRender, errorResult);
}
});
// router 단
function changeOpened(req, res, next) {
// some error occur
next({status: 400, message:'some error'});
}
에러 처리를 한 곳에서 할 수 있어서 이 방법을 사용하고 있다. nodejs 특성상 error 발생시 꼭 처리를 해줘야 한다. 안 그러면 프로세스가 죽는다ㅠㅜ