다시API 제공자(no debird- api)의 입장으로 돌아와서 나머지API 라우터를 완성해봅시다.
GET /posts/my 라우터와 GET /posts/hashtag/:title 라우터를 추가했습니다.
내가 올린 포스트와 해시태그 검색 결과를 가져오는 라우터입니다.
이렇게 사용자에게 제공해도 되는 정보를 API로 만들면 됩니다.
사용하는 측 (NodeCat) 에서는 위의 API를 이용하는 코드를 추가합니다.
토큰을 발급받는 부분이 반복되므로, 이를 함수로 만들어 재사용하는 것이 좋습니다.
routes/index.js와 controllers/index.js를 통째로 바꾼다.
request 함수는 NodeBird API에 요청을 보내는 함수입니다.
자주 재사용되므로 함수로 분리했습니다.
먼저 요청의 헤더 origin 값을 localhost:4000으로 설정합니다.
어디서 요청을 보내는지 파악하기 위해 사용하며, 나중에 주소가 바뀌면 이 값도 따라서 바꾸면 됩니다.
세션에 토큰이 없으면 ClientSecret을 사용해 토큰을 발급받는 요청을 보내고,
발급받은 후에는 토큰을 이용해 API 요청을 보냅니다.
토큰은 재사용을 위해 세션에 저장합니다.
만약 토큰이 만료되면 419 에러가 발생하는데, 이 때는 토큰을 지우고 request 함수를 재귀적으로 호출하여 다시 요청을 보냅니다.
API의 응답 코드에 따라 성공 여부를 알 수 있고,
실패한 경우에도 실패 종류를 알 수 있으므로 사용자 입장에서 프로그래밍에 활용할 수 있습니다.
GET /mvpost 라우터는 API를 사용해 자신이 작성한 포스트를 JSON 형식으로 가져오는 라우터입니다.
현재는 JSON으로만 응답하지만 템플릿 엔진을 사용해 화면을 렌더링 할 수도 있습니다.
GET /search/:hashtag 라우터는 API를 사용해 해시태그를 검색하는 라우터입니다.
각각 접속해보면 다음과 같은 결과가 나옵니다.
참고로 localhost:4000에 접속하면 GET/ 라우터가 없다는 에러가 발생합니다.
이는 GET/ 라우터를 만들지 않았기 때문입니다.
localhost:4000/mypost 접속화면
자신의 게시글 목록을 불러오는 것이므로 당연히 사람마다 결과가 다를 것입니다.
또한, NodeBird 앱에 올린 게시글을 가져오는 것이므로 게시글을 올리지 않았다면 아무 정보도 표시되지 않습니다.
클라이언트 비밀키가 유출되면 다른 사람이 여러분의 게시글을 가져갈 수도 있으니 항상 조심하길 바랍니다.
localhost:4000/search/빵빵이 접속화면
1분 뒤 요청이 만료되고 나서 다시 요청을 보내면, 알아서 토큰을 재발급한 후 다시 요청을 보냅니다.
이 경우 nodebird-api의 콘솔 에는 다음과 같은 세 개의 요청이 기록됩니다. 시퀄라이즈 로그는 생략(편집)
먼저 요청을 보낼 때 토큰이 만료되었으므로 419 에러가 발생합니다.
그때 request 함수의 catch 문에 의해 다시 request 함수가 실행되고, 토큰을 새로 가져온 뒤 요청을 다시 보냅니다.
이 과정은 NodeCat 콘솔에서는 POST /search/노드 하나의 요청으로만 기록됩니다.
'clone toy projects > node_express_sns' 카테고리의 다른 글
CORS 이해하기 (0) | 2023.08.25 |
---|---|
사용량 제한 구현하기 (0) | 2023.08.25 |
다른 서비스에서 호출하기 (0) | 2023.08.25 |
JWT 토큰으로 인증 하기 (0) | 2023.08.25 |
프로젝트 구조 갖추기 (0) | 2023.08.25 |