router 선언 순서의 중요성

suji·2022년 8월 7일
post-thumbnail

모임 만드는 cluvie 프로젝트의 라우터를 구현하다가
엉뚱한 다른 라우터의 값이 리턴되는 상황에 마주했다...

'에러도 아니고 응답은 되는데 아예 다른 응답이라니..?'

차라리 에러가 낫다고 생각할정도로 해맸었다

아주 간단하고도 기본적인 문제었기에 정리해보려고 한다

<문제의 코드>

// 클럽 1개씩 불러오기
clubRouter.get("/:id", async (req, res, next) => {
  try {
    const club = await Clubs.findOne({ where: { id: req.params.id } });
    if (!club) {
      return res
        .status(404)
        .json({ success: false, message: "존재하지 않는 모임입니다." });
    }
    await club.increment({ views: 1 }, { where: { id: req.params.id } });

    res.status(200).json({ success: true, club });
  } catch (err) {
    next(err);
  }
});

// 유저가 만든 모임 목록
clubRouter.get("/manager", verifyToken, async (req, res) => {
  try {
    const user_id = req.user;
    console.log(user_id);
    const clubList = await clubService.getClubListMadeByMe({ user_id });

    res.status(200).json({ success: true, clubList });
  } catch (err) {
    res.status(404).json({ success: false, message: err.message });
  }
});

라우터 선언 순서를 이렇게 했더니 /:id 라우터에 빨려들어가서 다른 라우터가 불려졌다

같은 자리에 params와 다른 주소를 불러오는 라우터가 있다면 순서를 주의하쟈!

<해결방법>

// 유저가 만든 모임 목록
clubRouter.get("/manager", verifyToken, async (req, res) => {
  try {
    const user_id = req.user;
    console.log(user_id);
    const clubList = await clubService.getClubListMadeByMe({ user_id });

    res.status(200).json({ success: true, clubList });
  } catch (err) {
    res.status(404).json({ success: false, message: err.message });
  }
});

// 클럽 1개씩 불러오기
clubRouter.get("/:id", async (req, res, next) => {
  try {
    const club = await Clubs.findOne({ where: { id: req.params.id } });
    if (!club) {
      return res
        .status(404)
        .json({ success: false, message: "존재하지 않는 모임입니다." });
    }
    await club.increment({ views: 1 }, { where: { id: req.params.id } });

    res.status(200).json({ success: true, club });
  } catch (err) {
    next(err);
  }
});
profile
문제를 해결하는 백엔드 개발자

0개의 댓글