skip과 limit을 사용하여 초기 랜더링 시 limit에 설정한 개수의 상품 조회skip 값을 증가시켜 새로운 상품 목록 조회const [skip, setSkip] = useState(0); // 조회할 데이터의 시작 위치
const order = req.query.order ? req.query.order : 'desc';
const sortBy = req.query.sortBy ? req.query.sortBy : '_id';
const limit = req.query.limit ? Number(req.query.limit) : '20';
const skip = req.query.skip ? Number(req.query.skip) : 0;
let findArgs = {};
for (let key in req.query.filters) {
if (req.query.filters[key].length > 0) {
findArgs[key] = req.query.filters[key];
}
}
const products = await Product.find(findArgs)
.populate("writer") // User 컬렉션에서 작성자 정보 조회
.sort([[sortBy, order]]) // 정렬
.skip(skip) // skip 값을 사용해 특정 위치부터 조회
.limit(limit); // limit 값만큼의 상품 수 제한
populate("writer")
sort([[sortBy, order]])
const order = req.query.order ? req.query.order : 'desc';
const sortBy = req.query.sortBy ? req.query.sortBy : '_id';
skip(skip)
limit(limit)
router.get('/', async (req, res, next) => {
const order = req.query.order ? req.query.order : 'desc';
const sortBy = req.query.sortBy ? req.query.sortBy : '_id';
const limit = req.query.limit ? parseInt(req.query.limit) : 10;
const skip = req.query.skip ? parseInt(req.query.skip) : 0;
try {
const products = await Product.find(findArgs)
.populate('writer')
.sort([[sortBy, order]])
.skip(skip)
.limit(limit);
const productsTotal = await Product.countDocuments();
const hasMore = skip + limit < productsTotal;
return res.status(200).json({
products,
hasMore,
});
} catch (err) {
return res.status(400).json({ success: false, err });
}
});
productsTotal = await Product.countDocuments()
전체 상품 수
countDocuments()는 find()와는 달리 데이터를 가져오지 않고 해당 데이터의 개수만 조회hasMore


hasMore : true 👉🏻 조회할 상품이 남아 있다는 의미const hasMore = skip + limit < productsTotal ? true : false;

