如何在Node.js和MongoDB中实现含全量页码信息的分页功能
分页功能修改实现方案
你只需要补充总文档数查询、总页数计算、上下页页码判断三个逻辑即可,修改后的完整代码如下:
router.get("/PO_pagination", verify, async (req, res) => { console.log("req.query", req.query) try { let { page, size } = req.query // 处理默认参数同时转数字,避免字符串运算异常 page = page ? parseInt(page) : 1 size = size ? parseInt(size) : 10 const limit = size const skip = (page - 1) * size // 新增:查询总文档数,计算总页数 const totalCount = await PurchaseOrders.countDocuments() const totalPages = Math.ceil(totalCount / limit) // 新增:计算上下页页码,不存在则返回null const prev = page > 1 ? page - 1 : null const next = page < totalPages ? page + 1 : null const po = await PurchaseOrders.find().limit(limit).skip(skip) return res.send({ page: page, size: size, totalCount: totalCount, // 可选返回总数据条数,方便前端展示 totalPages: totalPages, prev: prev, next: next, data: po }) } catch (error) { console.log("error", error) return res.status(400).json({ error: error }) } })
逻辑说明
- 如果你的分页接口带筛选条件,把和
find()里完全一致的筛选参数传入countDocuments(),即可保证统计的总条数和筛选后的数据匹配 - 总页数用
Math.ceil()向上取整,确保不满一页的剩余数据也能占用一个页码 - 上下页不存在时返回
null,前端可以直接根据该值判断是否需要禁用上下页操作按钮
内容的提问来源于stack exchange,提问作者Zaka awan
相关产品推荐
相关产品推荐

