3 layerd architecture 를 적용할 경우 request 값에 대한 validation 을 controller 혹은 service 에서 적용해 코드가 복잡하게 보이는 단점이 있다.
Joi 라는 npm 을 이용해 userSchema 라는 schema 를 선언하고 각 에러에 대해 직접 입력해 주는 것으로 error.message 에 원하는 에러 값이 들어가게 만들 수 있고,
또한 Joi.js 라는 파일을 따로 만들고 export 하는 것으로 controller 와 service 를 간단하게 정리할 수 있다.
const user_validation = {
user_signup: async (req, res, next) => {
const data = req.body;
const userSchema = Joi.object().keys({
nickname: Joi.string().required().messages({
"string.base": "404/닉네임에러라고 자식아",
"any.required": "403/닉네임이 없다고",
}),
// .error((error) => new Error("402/닉네임에러다 자식아")),
password: Joi.string()
.required()
.error((error) => new Error("403/비번 에러다 자식아")),
confirm: Joi.string()
.required()
.valid(Joi.ref("password"))
.error((error) => new Error("402/확인 에러다 이놈아")),
});
try {
await userSchema.validateAsync(data);
} catch (error) {
throw new Error(error.message || "400/이거냐되냐");
}
},
};
module.exports = user_validation;
이 경우 user_validation 을 middleware 로 적용해 사용할 수 있다.
.error((error) => new Error()) 는 에러가 발생할 경우 어떤 에러가 발생해도 모두 같은 메세지가 들어가는 오류가 있었다.
.message( { } ) 를 통해서 원하는 에러에 원하는 error.message 를 넣어줄 수 있다.
각각의 error 에는 이름이 있고 그 이름은 공식 문서에서 확인할 수 있다.