/ nodejs

expressjs - error handling 전략

토이 프로젝트야 에러 처리가 미숙해도 상관 없지만 운영하는 서비스가 에러 처리가 미숙하면 사용자 경험에 좋지 않다.

nodejs 로 에러 처리를 정리한 사항을 공유한다.

1. 케이스마다 대응하기

function someAction(req, res){
    // some error occur
    res.json(400, {'message':'some error occur'});
}

가장 손쉽지만 공통 로직을 추가하고 싶을때 중복 코드가 많이 발생한다.

2. 공통 에러 핸들링 처리하기

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 발생시 꼭 처리를 해줘야 한다. 안 그러면 프로세스가 죽는다ㅠㅜ