2022.06.01 - TIL [res, 썬더 클라이언트]

mython·2022년 6월 1일
0

TIL

목록 보기
5/31

res.send에 대해서 몰랐던 착각

기존 코드

//게시글 생성=======================================================

router.post("/posting", authMiddleware, async (req, res) => {
 
        const {nickName} = res.locals.user
       
        const {title,content} = req.body;
    
        const createdPosting = await Posting.create({ nickName,title, content});
     
        res.json({ user: createdPosting});
        
    
});


//-----------------------------------------------------------------
  • 해당 코드를 선더클라이언트로 실행했을때 내가 생각한 실행되는 구조는 이랬다.
  1. router에 post를 사용하였고 경로는 /posting 이고,

  2. authMiddleware를 사용하였기 때문에 const {nickName} = res.locals.user 로 작성하여서
    미리 필요한 닉네임 값은 받아올수 있으며

  3. 게시물의 제목과 내용은 body 를 통해서 직접 입력하게 하였고,

  4. const createdPosting 라는 변수의 안에 위의 과정을 거친 Posting.create({ nickName,title, content}); 를 저장

  5. res.json({ user: createdPosting}); 내가 보내고자 하는 값을 보내줘면 그게 선더클라이언트에서도 나오듯이
    그 값들이 디비에 저장되는 것으로 생각하고 있었다.


다르게 사용된 코드

//게시글 생성=======================================================

router.post("/posting/", authMiddleware, async (req, res) => {
 
        const {nickName} = res.locals.user
       
        const {title,content} = req.body;
    
      await Posting.create({ nickName,title, content});         ///디비에 넣는 명령어 부분 알아서 넣어짐
     
        res.json({});
        
    
});
            /// 실제로 디비에 넣는 부분은 await 다음에 나오는 크리에이트 부분. 이게 실행되면 알아서 넣어진다.

//-----------------------------------------------------------------

이 코드들의 실행결과는 위쪽에서 적힌 1~3 번까지는 유사하다

바뀐점은 4,5 번 순서인 변수값에 담아 주는거랑 res.json({}) 으로 바뀐건데,

사실 변수명으로 만들어서 created 할 필요 없이 그냥 이미 created 한 시점에서 저장은 되는 것이였다.

그리고 내가 저장된 값을 프론트가 없는 지금에서는 확인할 방법이 db에 잘 들어왔나 확인하는것 밖에 없는데,

그러한 과정을 생략하고 선더클라이언트에서 바로 볼 수 있게 할려고 1번째 코드식으로 해놧던것.

그래서 실행을 해보면

이러한 형태로 입력은 입력을 하면 response 값에 평소처럼 보여야할 db 에 들어가게 될 정보들이 보이지 않지만

실제로 db 에는 잘 들어간 것을 확인할 수 있다.

즉 백엔드쪽에서 자신이 올린걸 편하게 확인함과 동시에 프론트쪽에서도 업무를 편하게 하기 위해서 하는 시스템인것을

영성님 설명을 듣고 알게 되었따.



await

// 내꺼 게시물 조회 ================================================================

// 내꺼 게시물 조회 ================================================================

router.get("/posting/:nickName",authMiddleware,async (req,res)=>{
   
        const {nickName} = res.locals;
    
        const postingFind = await Posting.find({nickName: nickName});
        
        res.json({
            postingFind,
        });
    
    });
    
//-------------------------------------------------------------------------------------

추가적으로 알게된건, await 은 설명하자면 단어의 뜻대로 기다린다는 의미로써

위의 코드로 설명하자면 내가 10개의 닉네임값을 찾기를 원하는데 10개를 찾기전에 6개나 7개까지만 하고

멈춰버리면 안되니깐 전부다 찾기 전까지 멈추지말고 기다리라는 의미로 await 이라고 사용한다.

그리고 async는 await 을 쓰기위한 짝궁 같은거로 생각하면 되겟다.


[1번]

//댓글 목록 불러오기? ===================================================================

router.get("/comment/list/:postId", async(req,res)=>{
    const {postId} = req.params;

    const commentList = await Comment.find({postId: Number(postId) });

  
    res.json({
      commentList,
    })

});



//--------------------------------------------------------------------

[2번]

//댓글 목록 불러오기? ===================================================================
router.get("/comment/list/:postId", async(a,b)=>{
    const {postId} = a.params;

    const commentList = await Comment.find({postId: Number(postId) });

  
    b.json({
      commentList,
    })

});

//--------------------------------------------------------------------
  • 1번과 2번의 코드는 똑같이 작동된다.

  • 1번코드의 req, res는 하나의 약속? 규칙같은 느낌인줄 알았는데, 사실 저 두 변수는 그냥 지역변수 였던 것이다.

  • 그래서 a,b 로 바꿔도 작동한다

도움주신분 : 강명지님 ,윤영성 님

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

0개의 댓글