기술블로그

agora-states-server

이경찬 :) 2023. 2. 9. 11:10

1. CORS, morgan 적용, express 미들웨어 express.json() 적용

app.use(cors());
app.use(express.json({strict: false}));
app.use(morgan('tiny'));

2. 메인 화면을 원하는 경로로 라우팅

app.use('/discussions', discussionsRouter)

3. 서버 상태 확인 + listen

app.get('/', (req, res) => {
  res.status(200).send('health check');
  // throw '';  //테스트의 편의를 위해 작성
});

const server = app.listen(port, () => {
  console.log('[RUN] My Agora States Server...');
});

module.exports.app = app;
module.exports.server = server;

4. 주어진 repository의 data를 GET 요청에 따라 라우팅을 해주었다.

//router 구현
const router = express.Router();

router.get('/', findAll); //모든 discussion 목록을 조회하는 라우터
router.get('/:id', findById); // discussion 하나를 조회하는 라우터

module.exports = router;


//http messages
const { agoraStatesDiscussions } = require("../repository/discussions");
const discussionsData = agoraStatesDiscussions;

const discussionsController = {
  findAll: (req, res) => {
    const data = discussionsData.slice();
    return res.status(200).json(data);
  },
  findById: (req, res) => {
    const { id } = req.params;
    const list = discussionsData.find((item) => item.id === Number(id) )
    if(list) {
      return res.status(200).json(list);
    }
    else{
      return res.status(404).json('Incorrect request');
    }
  }
}
module.exports = { discussionsController };

5. fetch API 사용

한달 전에 구현했던 클라이언트와 오늘 만든 서버를 연동했다.

script.js 파일 최하단에 fetch API 작성

/*생략*/

fetch("http://localhost:3001/discussions/")
  .then(response => response.json())
  .then(json => {
    let agoraStatesDiscussions = json; 	//위에서 agoraStatesDiscussions 라는 dummy data를 사용했었다.
    const ul = document.querySelector("ul.discussions__container"); 
    render(ul); //화면에 dom elements를 render 해주는 함수를 위에서 구현했었다.
  })

http 요청 메서드

 

HTTP(Hypertext Transfer Protocol)는 웹을 통해 데이터를 전송하는 데 사용되는 프로토콜입니다. 지정된 리소스에 대해 수행할 작업을 나타내는 데 사용되는 요청 메서드 집합을 정의합니다. 가장 일반적인 HTTP 요청 방법은 다음과 같습니다:

GET: 지정한 리소스에서 데이터를 검색합니다.
예: 클라이언트가 웹 페이지의 내용을 검색하려고 하면 페이지의 URL을 사용하여 서버에 GET 요청을 보낼 수 있습니다.

POST: 처리할 데이터를 지정된 리소스로 제출합니다.
예: 클라이언트가 일부 데이터와 함께 양식을 제출하려고 하면 요청 본문의 양식 데이터와 함께 POST 요청을 서버로 보낼 수 있습니다.

PUT: 현재 리소스를 새 데이터로 업데이트합니다.
예: 클라이언트가 사용자의 프로필 정보를 업데이트하려고 하면, 요청 본문의 업데이트된 정보와 사용자의 프로필 리소스의 URL을 사용하여 PUT 요청을 서버로 보낼 수 있습니다.

삭제: 지정한 리소스를 삭제합니다.
예: 클라이언트가 사용자의 프로필을 삭제하려고 하면, 사용자의 프로필 리소스 URL과 함께 서버에 DELETE 요청을 보낼 수 있습니다.

HEAD: 응답 본문 없이 지정된 리소스의 헤더 정보를 검색합니다.
예: 클라이언트는 웹 페이지의 내용을 검색하지 않고 웹 페이지가 존재하는지 확인하려고 합니다. 클라이언트는 페이지의 URL로 서버에 HEAD 요청을 보낼 수 있습니다.

패치: 부분 리소스를 업데이트합니다.
예: 클라이언트는 사용자의 프로필 정보의 일부만 업데이트하려고 하며, 요청 본문의 업데이트된 정보와 사용자의 프로필 리소스의 URL을 사용하여 PATCH 요청을 서버로 보낼 수 있습니다.

다음은 가장 일반적으로 사용되는 HTTP 요청 방법입니다. OPTIONS와 CONNECT와 같은 요청 방법이 더 많지만, 사용 빈도는 더 적습니다.