You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:54:03