Node.js - 블로그 CRUD API

김동하·2021년 3월 1일
0

node

목록 보기
3/5
post-thumbnail

POST /post/:id

아 한참 얼탔다. 문제가 뭐냐면 login한 유저가 POST로 게시물을 등록하면 id를 기준으로 users 테이블을 조회해서 맞는 id가진 유저의 컬럼 값에 게시물을 추가 해줘야 하는데 여기서 갑자기 막혀버림! 그러니까 회원가입(컬럼에 추가) + 로그인(컬럼에 있나 확인)의 기술

이유 1. httpie로 가짜 request를 보내고 있는데 token을 어떻게 담야하는지 그 토큰으로 users 테이블에서 id를 어떻게 조회하는지 모르겠다. 그래서 파라메터에 상수로 숫자를 넣었다.

어찌저찌 id값은 받아왔는데 findUnique에 id값이 일치하는 거 조회하려고 하니까 안된다!!
{where: { id: 3 }} 이 부분에서 id:user_id 혹은 id는 전부 에러가 나서 일단 상수로 또 기입...

이렇게 connect해서 물리는 줄 알았는데 에러가 난다. table명이 안 들어가서 그런가..

일단 공문을 찾아보니 이렇게 articles라는 배열이 값을 생성하는 게 있어서 생성했다.

  • 내가 원하는 모습이다

이렇게 한번 만들어보자.. 김동하.. 달린다..

25분 뒤

미쳤다 김동하 해냈다... 25분의 나와의 싸움을 다시 재현해보자.

  • 스키마

일단 프리마즈로 생성된 articles의 테이블을 보면 만들지도 않았던 users란 컬럼이 있고 거기에 user_id가 있다. 저걸 보자마자

users에 connect를 해야함을 알고 바로 꽂았다 후후

하지만 문제는 어떤 값으로 연결할 것인가였는데 나는 자꾸 id에 집착해서 articles 테이블에 있는 user_id와 users의 유저에 id에 연결하는 줄 알았는데 왜인지 모르겠지만 이 친구들은 기본키가 아니다!? 라고 결론을 내렸다. 왜냐면 user_id를 기준으로 삼는 게 아니라 users에 있는 값을 기준으로 삼아야 한다! 예를들어

{ id : foundUser.id } 이런 식으로!

데이터베이스 입성... 감격이다...

근데 왜 아직도 where에서 id를 못 잡는지 해결 못함.. 뭔가 스코프 혹 변수명 중복 문제인 거 같은데

와 찾았다! Int문제.. 이래서 타입스크립트랑 호환 짱짱이구나

GET /post/:id

이제 해당 유저가 쓴 글을 모두 가져오자.

findUnique, where, select으로 쉽게 가져올 수 있다.

한 번도 등록한 게시물이 없을 때 에러

등록한 게시물 전부 가져오기!

DELTE /post/:id

헷갈렸던 것은 유저를 타고 post를 들어가면 id가 두개 필요하다고 생각해서 post/2(user의 pk) 그리고 body에 post의 pk를 담아야 하는 줄 알았는데 그냥 post/post의 pk 로 보내면 된다.

왜냐면 유저와 게시물 테이블은 독립적이기 때문!!!!! 굉장해!!

포린키로 물려있을 뿐이지 어쨌뜬 articles 테이블에 id는 쌓여간다. RESTful 진짜 대단하다..

에러 핸들링을 여기서 못 하겠다. 선택한 포스트가 없거나 이미 지워졌으면 어떻게 핸들링 해야하지?

PUT /post/:id

update라는 메서드와 where을 한번에 써서 업데이트 하면 된다. 이건 프론트보다 더 쉬운듯!

업데이트도 뚝딱! 진짜 뭐가 이렇게 재밌냐

여기서도 에러핸들링이 걸리는데 으렵다..

/post/:id/comment (난이도 상승)

이제 죽음의 코멘트다 가보자..

일단 post의 id로 들어가서 comment를 select해서 추가하는 식으로 하면 될 거 같다.

하 일주일 지나니까 풀리네!

코멘트는 user_id와 articles_id가 둘다 필요하다. 중간 테이블이니까!

그래서 articles의 id로 해당 post 가져오고 그 post에 저장된 user_id를 가져온다. 원래는 토큰을 가져와서 거기서 해체 그리고 user테이블에서 찾아야 하는데 내가 httpie 친구를 사용하기 때문에 축약으로 저렇게 했다!

결론은 comments 테이블(중간 테이블)을 위해서 양쪽 테이블 모두 가져와야 한다!

그래서 create할 때 둘 다 연결!

크....

profile
프론트엔드 개발

0개의 댓글