Weekend I Learned 22.05.29

유승완·2022년 5월 29일
0

Weekly I Learned

목록 보기
2/4

지금은 블로그 게시판을 만들고 있다.

댓글 등록 API

router.post("/boardsreply", authMiddleware, async (req, res) =>{
    const { userId } = res.locals.user;
    const writeId = await Users
        .findOne({_id: userId})
        .exec();
    const { comment, boardsId } = req.body;
    const createdReply = await Reply.create({ comment: comment, user: writeId.user, boardsId: boardsId });
    res.json({ replys: createdReply });
});

jwt 토큰(로그인정보)을 localStorage에 한다. Reply 테이블(댓글테이블)에는 댓글내용, 작성자, 게시글ID가 들어간다. 게시글ID와 댓글내용은 req.body로 받아오고, 작성자는 토큰에서 받아와서 Reply 테이블에 저장한다.

게시글 수정/삭제 API

router.get("/boards/goUpdate/:boardsId",authMiddleware, async (req, res) => {
    const { boardsId } = req.params;
    const { userId } = res.locals.user;

    const [detail] = await Boards.find({_id: boardsId});
    const [detail2] = await Users.find({_id: userId});

    console.log(detail.user)
    console.log(detail2.user)

    const isUser = (detail.user === detail2.user);
    res.send({
        isUser, boardsId
    })
})

게시글을 수정/삭제 각각의 기능의 API는 따로있고, 이건 수정/삭제를 할수있는 페이지로 이동하는 API이다. 기존에 게시글은 게시글의 비밀번호가 따로 있었고, 로그인/회원가입 기능이 없어서 게시글 비밀번호로 수정/삭제를 하였는데 로그인/회원가입 기능을 추가하면서 게시글의 비밀번호는 없앴고, 현재 로그인되어있는 ID가 게시글의 작성자와 동일하면 수정/삭제 페이지로 이동이 가능하게끔 만들었다. 변수명을 좋지않게 만들었는데.. 아직 변수명을 올바르게 잘 만드는 요령이 부족한것 같다. 일단 detail.user 는 게시글의 작성자고, detail2.user는 현재 로그인되어있는 유저이다.
isUser에 true or false 값을 담아서 보내주고, 클라이언트에서 isUser값이 true면 수정/삭제페이지로 이동, false면 작성자만 수정/삭제 할수있다는 메세지를 보냈다.

어제오늘 구현했던게 더 많이 있는데, 구현하면서도 실력적으로 부족함을 많이 느끼게된다.

로그인/회원가입 기능이 추가될 것을 생각하지않고 그전에 막만들어서.. 고칠 부분이 너무 많다. error 처리에대해서도 급한대로 만들어서 구현이 되긴하는데.. 좋은방법은 아닌거같아서 이건 내일 정리해서 질문할예정이다.

REST(RESTful) 이란?

RESTful API를 통해 요청이 수행될 때 RESTful API는 리소스 상태에 대한 표현을 요청자에게 전송합니다. 이 정보 또는 표현은 HTTP: JSON(Javascript Object Notation), HTML, XLT 또는 일반 텍스트를 통해 몇 가지 형식으로 전송됩니다. JSON은 그 이름에도 불구하고 사용 언어와 상관이 없을 뿐 아니라 인간과 머신이 모두 읽을 수 있기 때문에 가장 널리 사용됩니다.

API가 RESTful로 간주되려면 다음 기준을 따라야 합니다.

  • 클라이언트, 서버 및 리소스로 구성되었으며 요청이 HTTP를 통해 관리되는 클라이언트-서버 아키텍처
  • 스테이트리스(stateless) 클라이언트-서버 커뮤니케이션: 요청 간에 클라이언트 정보가 저장되지 않으며, 각 요청이 분리되어 있고 서로 연결되어 있지 않음
  • 클라이언트-서버 상호 작용을 간소화하는 캐시 가능 데이터
  • 정보가 표준 형식으로 전송되도록 하기 위한 구성 요소 간 통합 인터페이스. 여기에 필요한 것은 다음과 같습니다.
    • 요청된 리소스가 식별 가능하며 클라이언트에 전송된 표현과 분리되어야 합니다.
    • 수신한 표현을 통해 클라이언트가 리소스를 조작할 수 있어야 합니다(이렇게 할 수 있는 충분한 정보가 표현에 포함되어 있기 때문).
    • 클라이언트에 반환되는 자기 기술적(self-descriptive) 메시지에 클라이언트가 정보를 어떻게 처리해야 할지 설명하는 정보가 충분히 포함되어야 합니다.
    • 하이퍼미디어: 클라이언트가 리소스에 액세스한 후 하이퍼링크를 사용해 현재 수행 가능한 기타 모든 작업을 찾을 수 있어야 합니다.
  • 요청된 정보를 검색하는 데 관련된 서버(보안, 로드 밸런싱 등을 담당)의 각 유형을 클라이언트가 볼 수 없는 계층 구조로 체계화하는 계층화된 시스템.
  • 코드 온디맨드(선택 사항): 요청을 받으면 서버에서 클라이언트로 실행 가능한 코드를 전송하여 클라이언트 기능을 확장할 수 있는 기능.
profile
나를 위한 기록

0개의 댓글