과제를 하며 내가 작성했던 에러 처리 코드는 다음과 같다.
signup = async (req, res, next) => {
try {
const { email, name, password, passwordCheck } = req.body;
if (password !== passwordCheck) {
return res.status(400).json(
response({
status: 400,
message: "비밀번호가 일치하지 않습니다."
})
);
}
...
} catch (error) {
next(error);
}
};
모든 응답을 response라는 모듈을 만들어 형식을 일치시켰다.
내가 걸러내지 못한 에러는 catch문으로 에러를 반환했다.
반환값을 통일하는 방법(내가 사용한 방식)과 throw new Error를 사용한 방법, 이 두 방법 모두 사용자가 받는 형식은 동일하다.
그러나 에러의 경우 throw new Error로 처리하는 것이 좋다.
내가 사용한 방식의 단점은
1. 에러 발생 시 결과값을 사용자에게 바로 전달하기에 로그가 남지 않는다.
2. 반환값을 전부 통일해버리면, 코드를 읽는 입장에서 정상적인 상황인지, 에러인지 바로 알아채기 좀 어렵다.
위 코드를 수정해보자.
signup = async (req, res, next) => {
try {
const { email, name, password, passwordCheck } = req.body;
if (password !== passwordCheck) {
throw new customError(
400,
"Bad Request",
"비밀번호가 일치하지 않습니다."
);
}
...
} catch (error) {
next(error);
}
};
에러처리는 throw new Error를 통해 하자!