아이템 시뮬레이터를 만든 결과,
핸들러를 try-catch문을 통해 같은 형태로 에러를 대비하였다.
같은 형태로 반복된다면 함수 형태로 만들면 좋을 것 같다는 피드백을 받고
wrap 함수를 만들어보았다.
[wrap]
export const wrap = (func) => {
return (async (req, res, next) => {
try {
return await func(req, res, next)
} catch (error) {
return next(error)
}
})
}
wrap 함수는 비동기 함수를 인자로 받으며,
비동기 함수(인자)를 try-catch문을 통해 실행한 결과 값을 리턴해주는 함수이다.
에러가 있을 경우에는 next 메서드를 통해 에러를 처리해준다.
[핸들러]
router.post('/character', wrap(async (req, res, next) => {
const character_name = req.body.character_name;
const { user } = req;
const exist_character_name = await prisma.character.findFirst({ where: { character_name: character_name } });
if (exist_character_name) {
res.status(400).json({ error: '이미 존재하는 캐릭터 이름입니다.' });
}
await prisma.character.create({
data: {
character_name,
user_id: user.user_id,
}
});
return res.status(200).json({ data: user.user_id });
}));
위와 같이 기존 핸들러(비동기 함수)에 wrap 함수로 감싸주어 핸들러(비동기함수)의
에러를 wrap 함수의 next 메서드를 통해 처리할 수 있다
모든 핸들러의 try-catch문을 간단하게 wrap로 감싸주면서
코드의 가독성을 높일 수 있게 되었다!