본문 바로가기

JavaScript

[Express] 같은 경로의 핸들러 묶기

API는 같은 주소지만 HTTP 메소드를 다르게 하여 다양한 기능을 할 수 있습니다.

동일한 주소를 하나로 묶어서 관리할 수는 없을까요?


두 가지 예제를 보면서 알아보겠습니다.

app.get('/event/:n', (req, res) => {
  // n회차 이벤트 당첨자 출력
});

app.post('/event/:n', (req, res) => {
  // n회차 이벤트 당첨자 생성
});

app.put('/event/:n', (req, res) => {
  // n회차 이벤트 당첨자 수정
});

app.delete('/event/:n', (req, res) => {
  // n회차 이벤트 당첨자 삭제
});

매우 직관적인 단일 라우트 방식입니다.
동일한 경로에 대한 처리이다 보니 반복되는 코드가 많습니다.

그럼 동일한 경로를 관리할 때, 어떤 방법이 있을까요?

app.route('/event/:n')
  .get((req, res) => {
    // n회차 이벤트 당첨자 출력
  })
  .post((req, res) => {
    // n회차 이벤트 당첨자 생성
  })
  .put((req, res) => {
    // n회차 이벤트 당첨자 수정
  })
  .delete((req, res) => {
    // n회차 이벤트 당첨자 삭제
  })

공식 사이트에서는 위 예제와 같은 솔루션을 제안합니다.
동일한 주소로 하나의 객체를 생성한 후 각 메소드로 체이닝하여 작성합니다.

보기에도 가독성이 좋아지지 않았나요?


개발을 하면서 중복 코드를 제거하기 위해 고민하는 일은 큰 도움이 된다고 생각합니다.
이번 시간에는 공식 사이트에서 제공하는 솔루션으로 해결하고자 했습니다.
하지만, 로직이 길어지면 한 눈에 파악하기 힘들어 체이닝 방식도 고민을 한 후 사용해야 한다고 느꼈습니다.

이번 포스트는 여기까지입니다.
틀린 내용이 있다면 지적 부탁드립니다. 감사합니다!