20220730_TIL_Joi 사용법과 기타 코드 정리법

codeing999·2022년 7월 30일
0

CRUD BACKEND 구현

목록 보기
2/10
import Joi from "joi";
//생략

const postNote = async (req, res, next) => {

    try {

        const noteDto = await Joi.object({
            title : Joi.string().min(1).max(50).required(),
            content : Joi.string().min(1).max(255).required()
        }).validateAsync({ ...req.body });

        const note = await noteQuery.postNoteQuery(noteDto);
        return res.status(201).json(
            utils.createJson(true, 'Note is created', note));
    
    } catch (err) {

        console.error(err);
        return res.json(err.message);

    }

};

@ 글을 게시하는 함수이다.
@ req.body는 {title, content}이다.
@ Joi뒤에 .object()가 붙는 것은 req.body가 object이기 때문이다.
@ title은 타입은 string이고 길이 최소값은 1이고 최대값은 50이고 required여야 한다. required가 아니면 저건 아예 안쓰면 된다.
마치 db명세서를 작성하 듯이 .으로 이어가며 써주는 것이다.
@ 그리고나서 마지막으로 .validateAsync로 안에
{ ...req.body}를 넣으며 부름으로써 그 안의 값들인 title과 content에 대해서 검증하겠다는 것을 쓴다.
@ 그냥 validate도 있는데 validateAsync를 쓸 예정.

@ 밑에 코드들은 제쳐두고 일단 이부분을 이렇게 작성하면,
title이 ''과 같이 빈 스트링이어도, 50자 이상의 긴 스트링이어도 잡아내는 것은 물론. title 키값이 body에 없어도 잡아내며
body에 title과 content말고 다른 키밸류가 있는 것도 잡아낸다.

@ 쿼리문은 일단 가장 나중에 작성해도 되고 나머지를 먼저 작성하여 함수들을 다 완성해두면 작업이 매우 빨라진다.
@ 관련 있는 코드끼리만 붙이고 아닌 거는 한줄을 띄워서 가독성을 높인다.
@ 나중에 가면 아예 저 검증하는 부분들도 따로 한곳에 모아놓고 쓸거다.
@ 함수이름 바로 윗줄에 /** 치고 엔터를 누르면 함수에 대한 설명을 쓸 수 있다. 설명은 물론 인자과 리턴값의 타입도 명시할 수 있다. 나중에 그 함수 이름에 마우스 가져다대면 여기 적은게 나온다.

profile
코딩 공부 ing..

0개의 댓글