익스프레스 및 몽구스를 사용한 페이지 매김

저만의 MERN 전자 상거래 앱을 처음부터 만들기 시작했을 때 백엔드 구현에 대해 생각할 시간이 없었습니다. 예를 들어 제품 검색을 위해 데이터베이스에서 모든 제품을 요청하고 일부 JS를 사용하여 프런트엔드에 필터를 적용할 수 있다고 생각했습니다. 내 데이터베이스에 제품이 12개만 있다면 이것이 "괜찮은"솔루션이 될 것입니다. 그러나 나는 내가 얼마나 어리석었는지 금세 깨달았다.

내 데이터베이스에 수백 개의 제품이 있다고 상상해 보십시오. 단일 요청으로 모든 데이터를 가져오는 데 시간이 얼마나 걸립니까? 얼마나 많은 대역폭을 사용하시겠습니까? 사용자가 4G에 연결되어 있으면 어떻게 됩니까? 브라우저가 필터에 대한 프런트 엔드 코드를 실행하는 데 사용할 메모리 양은 얼마입니까?

여기에서 나는 일반적으로 수행되는 방법과 모범 사례가 무엇인지에 대한 조사(구글링)를 시작했고(MongoDB를 Mongoose와 함께 사용하고 있습니다), Mongoose를 사용하여 데이터를 요청합니다.

limit() 메소드



이 메서드는 숫자를 매개변수로 받고 한 번의 요청으로 얻을 수 있는 최대 문서 수를 설정할 수 있습니다.

skip() 메서드



이 메서드는 숫자를 매개변수로 받고 사용자가 건너뛸 문서 수를 지정할 수 있습니다. 요청 시 이 메서드는 지정한 문서n를 무시하고 나머지를 반환합니다.

코드를 보여주세요





const getProducts= async (req, res, next) => {
    try {
        // We destructure the req.query object to get the page and limit variables from url 
        const { page = 1, limit = 10 } = req.query;

        const products = await Product.find({ ...req.query })
            // We multiply the "limit" variables by one just to make sure we pass a number and not a string
            .limit(limit * 1)
            // I don't think i need to explain the math here
            .skip((page - 1) * limit)
            // We sort the data by the date of their creation in descending order (user 1 instead of -1 to get ascending order)
            .sort({ createdAt: -1 })

        // Getting the numbers of products stored in database
        const count = await Product.countDocuments();

        return res.status(200).json({
            products,
            totalPages: Math.ceil(count / limit),
            currentPage: page,
        });
    } catch (err) {
        next(err);
    }
};

} 


결론



사실 제가 개발하고 있는 MERN 애플리케이션은 튜토리얼이나 과정을 따르지 않고 구축하는 첫 번째 프로젝트이며 가능한 한 적은 라이브러리와 타사 코드를 사용하려고 노력하고 있으므로 그 과정에서 배우고 있습니다. , 그리고 내가 말할 수 있는 최소한은 내가 개발자로서 성장하게 만든 많은 장애물에 이미 직면했다는 것입니다. 내가 직면한 문제와 해결 방법을 dev.to에서 최대한 많이 공유하겠습니다.

나는 아직 블로깅과 웹 개발에 익숙하지 않기 때문에 피드백이 있으면 읽고 싶습니다.

좋은 웹페이지 즐겨찾기