본문 바로가기
필수 개발지식/개념정리, 유용한팁

에러핸들러/ExpressJS Aasync Errors

by 코딩하는짱구 2023. 5. 5.
반응형

✅오늘 학습 Keyword

3계층 아키텍처 패턴에 ExpressJS Aasync Errors 에러핸들러 적용하긔

✅오늘 겪은 문제 및 해결

controller, service, repository 에서 다발적으로 발생하는 에러를 한 곳으로 넘겨서 가독성과 효율을 높이고 싶었다.

 

ExpressJS Async Errors

https://www.npmjs.com/package/express-async-errors

 

1.

npm install express-async-errors --save

 

2. 

 

error handler middleware

module.exports = async (error, req, res, next) => {
  //"404/어쩌구" 형태의 에러를 잡아오면 "/"기점으로 split 한 후
  //각각 status, errorMessage값을 할당해줌
  const [status, errorMessage] = error.message.split('/');
  console.error(error);

  //위에서 split한 번호와 에러메세지를 아래와 같이 출력한다.
  return res.status(status).json({ errorMessage });
};

 

'express-async-errors'와 새로 만든 errorMiddleware를 app.js에 등록해준다.

//app.js
const express = require('express');
require('express-async-errors');
const app = express();
const port = 3000;
// const postsRouter = require('./routes/posts.routes');
const router = require('./routes');
const cookieParser = require('cookie-parser');
const errorMiddleware = require('./middlewares/error-middleware');

app.use(express.json()); //()
app.use(cookieParser());
app.use('/api', router);
app.use(errorMiddleware);

app.listen(port, () => {
  console.log(port, '포트로 서버가 열렸어요!');
});

 

작동원리: errorMiddleware를 등록하면 모든 요청에 대해 먼저 errorMiddleware가 실행되며, 이 미들웨어는 'next'함수를 사용하여 다음 미들웨어로 요청을 전달한다. next에 에러 객체가 전달되면 next로 안빠지고 에러 핸들러 함수를 호출한다. 

✅알게된 점 및 계획

전역에서 발생하는 error를 한군데에서 해결하는 기능과 작동원리를 파악, 구현했다. 

각각의 계층에서 error를 발생시키는 것 보다 훨씬 깔끔하고 효율적이라고 느껴지지만 오히려 특정에러에 대한 구체적 파악이 어렵지 않을까 실험해볼 예정.

 

반응형