npm - joi

Jaa-van·2023년 5월 20일
0
post-thumbnail

기능

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 & .message

.error((error) => new Error()) 는 에러가 발생할 경우 어떤 에러가 발생해도 모두 같은 메세지가 들어가는 오류가 있었다.

.message( { } ) 를 통해서 원하는 에러에 원하는 error.message 를 넣어줄 수 있다.

각각의 error 에는 이름이 있고 그 이름은 공식 문서에서 확인할 수 있다.

에러 리스트
https://joi.dev/api/?v=17.9.1#list-of-errors

0개의 댓글