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