2022.05.28 TIL

Seong Hyeon Kim·2022년 5월 27일
0

TIL

목록 보기
2/31

Schemas

const mongoose = require("mongoose");       /// 몽구스를 불러옴

const TodoSchema = new mongoose.Schema({       ///스키마를 정의한다. 스키마는 클래스 연산자라 new 붙여줘야됨
    value: String,      				///입력값을 문자형으로
    doneAt: Date,       				/// 1.
    order: Number      			 /// 차곡차곡 쌓일때 생기는 일종의 숫자? 1번째로 쌓인애는 1 이 됨
});      


TodoSchema.virtual("todoId").get(function(){       /// 2.  
    return this._id.toHexString();
});
TodoSchema.set("toJSON", {
    virtuals: true,
})



module.exports = mongoose.model("Todo",TodoSchema);     /// 스키마를 만들었으니 모듈로서 내보내줘야 작동한다.


/**
 * 1. doneAt : date 는 체크를 했는지 안했는지 알수있게 하는 것. 만약 체크를 했다면 언제햇는지
 *   했다면 언제 했는지를 알려주기 위한 용도. 만약 체크 한것만 표시하고 싶다면
 *   이녀석 값이 null 인지 아닌지만 확인하면 됨 
 */



/**
 * 2. 이 버튜얼 함수는 프론트엔드 파일인 스테틱 안에 있는 todoId 라는 값이 존재해야 작동가능
 *    그래서 const require 안에 넣어줘서 각각 id값을 만들어줘도 되지만, 몽고디비는 알아서 
 *     _id 라는 고유 아이디 값이 저장되서 나오기 때문에 그것을 활용해주기 위해 사용하는게 
 *      바로 이 버튜얼 함수다. 참고로 저 양식으로 써야된다고 규정되있음.
 * 
 *      코드를 해석하자면 todo모델이  json형태로 변환될때 버츄얼 스키마를 포함한다 라는 뜻
 */

오늘은 스키마에 대한 부분에 좀더 알아가게 된것 같다.
그리고 각 부분들의 코드가 어떤 역활을 하는지 주석으로 달아보면서

혹시나 다음에 기억이 안날 것을 대비해서 이 코드가 어떤것을 지칭하는지를 이해하기 좋게 설명을 달아두었다.





router

router.patch("/todos/:todoId",async (req,res)=>{
    const {todoId} = req.params;
    const {order,value, done} = req.body;

    const todo = await Todo.findById(todoId).exec();    ///내가 바꿀려는 todoId 찾아옴

    if(order){                                              /// 오더가 값을 입력받앗을때에
        const targetTodo = await Todo.findOne({order}).exec();  /// 있다면 찾아서
        if (targetTodo){                                    ///근데 원래 있떤 애도 지꺼 바꿔줘야지 라는 부분
            targetTodo.order = todo.order;
            await targetTodo.save();
        }
        todo.order = order;         ///여기서 바꿀려는 애가 바뀐값으로 변경      

기초 주차에서는 라우터의 각각의 코드들이 이해가 잘 안갔었는데,
주석을 달면서 해당 코드들이 그 라우터에서 어떤 의미로 사용이 되었는지를 적어가면서 했더니
이전보다 좀더 이해가 잘 된것 같다.

profile
삽질도 100번 하면 요령이 생긴다. 부족한 건 경험으로 채우는 백엔드 개발자

0개의 댓글