[실전] 페이지네이션 적용하기

leehowook·2022년 7월 29일
0

메인은 쿼리
127.0.0.1:3000/api/main?page=3&perPage=6

// 메인 페이지
router.get('/', async (req, res) => {
  try {
    const page = Number(req.query.page || 1);
    const perPage = Number(req.query.perPage || 6)
    const roomLength = await Room.find({});
    const mainLength = roomLength.length;
    const roomList = await Room.find({})
        .sort({ createAt: -1 })
        .skip(perPage * (page - 1))     //perPage가 6이라면 1page로 왔을 때 6*(1-1) = 0이라서 0부터 6까지 출력
        .limit(perPage)

    res.status(200).json({
      result: true,
      roomList,
      mainLength,
    })
  } catch (error) {
    return res.status(400).send({
      result: false,
      msg: '스터디를 불러올 수 없습니다.',
      errmsg: error.message,
    });
  }
});

카테고리는 파람스>쿼리
127.0.0.1:3000/api/main/tag/공무원?page=1&perPage=6

//카테고리
router.get('/tag/:tagName', async (req, res) => {
  try {
    const { tagName } = req.params;
    const page = Number(req.query.page || 1);
    const perPage = Number(req.query.perPage || 6)
    const roomLength = await Room.find({ tagName });
    const tagLength = roomLength.length;
    const roomList = await Room.find({ tagName })
        .sort({ createAt: -1 })
        .skip(perPage * (page - 1))     //만약 perPage가 10이라면 1page로 왔을 때 10*(1-1) = 0이라서 0부터 9까지 출력
        .limit(perPage)

    res.status(200).json({
      result: true,
      roomList,
      tagLength,
    });
  } catch (error) {
    console.log(error);
    res.status(400).send({ errorMessage: error.message });
  }
});
profile
be higher

0개의 댓글