본문 바로가기
  • 삽질하는 자의 블로그
Node.js(Express)

6. Validation 아웃소싱

by 이게뭐당가 2023. 2. 18.

기본적으로 Validation 은 서버의 전유물이다.

유저로부터 로직을 숨길수도, 함부로 유저가 코드를 만질 수 도 없으며,

최종적으로 요청을 받고 응답을 보내는 곳도 바로 서버이기 때문이다.

 

Validation 로직을 처리하기 위해서는

라이브러리와 미들웨어를 사용하거나

자체 로직을 컨트롤러의 로직에 넣어서 사용하는 경우가 있다.

 

나는 후자를 선호한다.

 

따라서, Valiadation 로직을 작성해 아웃소싱하고, 컨트롤러의 로직에 넣어 사용해보도록 하자.

 

1. helper 폴더를 만들어, validation 코드를 만든다.

 

 < helper / diary-Validation.js >

        const diaryValidation = (userInput) => {
            if (
                !userInput.userEmail.includes("@") ||           // Validation Check
                !userInput.diaryTitle ||
                !userInput.diaryContent ||
                typeof userInput.feeling !== "number" ||
                userInput.feeling < 1 ||
                userInput.feeling > 9
            ) {
                const error = new Error("입력값이 잘못되었습니다.");    // 그렇다면 error return
                error.code = 400;
                return error;
            } else {
                return null;        //  아니라면 null 을 return 한다.
            }
        };
        
        exports.diaryValidation = diaryValidation;

 

2. 컨트롤러에서 Validation 을 가져와 사용한다.

 

 < controllers / diary-contorller.js >

    const { diaryValidation } = require("../helper/diary-valdation");   // export 한 Validation 파일의 "함수를 직접 뽑아서" 사용한다

    const postUserDiary = (req, res, next) => {

        const errorCheck = diaryValidation(req.body);	// 해당 함수에 따라, null 혹은 error 가 반환되고

        if (errorCheck !== null) {			// 그에따라, error 를 next 로 넘긴다. return 은 잊지않는다.
            next(errorCheck);
            return;
        }
                ...

        res.status(201).json({ message: "success", data: inputData });
    };
    
    
    

** "함수를 { } 를 사용하여 직접 뽑지 않는다면"

    const valdationCheck = require("../helper/diary-valdation");

    valdationCheck.diaryValidation(req.body)

	이처럼 여러줄 써야하니 내부에있는 함수를 { } 를 사용하여 직접 뽑도록 하자.

** "넘겨진 error 는"

	< index.js > 의 "error처리 미들웨어" 에 의해 error code 와 message 가 표시될것이다.

 

댓글