Async Request Handler

난나다·2023년 4월 10일
0

EliceSW4

목록 보기
6/7

request handler에서 오류를 처리하기 위한 방법은 두 가지가 있습니다.

  1. promise().catch(next)
  2. async function, try ~ catch, next

async 함수를 작성해 비동기 처리를 구현하면 매우 편하지만 매번 그 안에서 try-catch 문을 작성하는 번거로움이 있습니다.

이를 해결하기 위해 asyncHandler 를 따로 구현해줍니다.

const asyncHandler = (requestHandler) => {
	return async (req, res, next) => {
    	try {
        	await requestHandler(req, res);
        } catch (err) {
        	next(err);
        }
    }
}

그리고 async로 진행되는 미들웨어를 asyncHandler로 감싸서 throw되는 에러를 처리합니다.

router.get('/', asyncHandler(async (req, res) => {
	const posts = await Posts.find({});
  	if (posts.length < 1) {
    	throw new Error('Not Found');
    }
  	res.render('posts/list', { posts });
});

이렇게 되면 중간중간 발생되는 에러 때문에 매번 try-catch문을 작성할 필요없이 asyncHandler 함수로 한번만 더 감싸서 코드를 작성하면 되기 때문에 불필요한 코드 작성 시간을 줄여주고 코드의 가독성도 높여주는 장점이 있습니다.

좋은 방식이라고 생각되어 따로 한번 더 정리하였습니다.

출처

이 글은 엘리스 SW 엔지니어 트랙을 기반으로 작성되었습니다.

0개의 댓글