(黑马程序员)MongoDB + Express + art-template 项目实例-博客管理系统 第六页

2.4、用户数据分页

当数据库中的数据非常多是,数据需要分批次显示,这时就需要用到数据分页功能。

分页功能核心要素:

1、当前页,用户通过点击上一页或者下一页或者页码产生,客户端通过get参数方式传递到服务器端
2、总页数,根据总页数判断当前页是否为最后一页,根据判断结果做响应操作

 

总页数的计算方式:Math.ceil(总数据条数 / 每页显示数据条数)

2.4.1、接收客户端传递过来的当前页参数

打开 route-admin 目录下的 userPage.js 文件:

// 导入用户集合构造函数
const { User } = require('../../model/user');

module.exports = async (req, res) => {
  // 接收客户端传递过来的当前页参数
  let page = req.query.page;
  res.send(page);
  return; // 阻止程序向下执行

  // 将用户信息从数据库中查询处理
  let users = await User.find({})
  // 渲染用户列表模块
  res.render('admin/user', { users: users })
}

回到浏览器中刷新页面:http://localhost/admin/user?page=1 ,可以看到:页面显示1

2.4.2、计算总页数

根据上面的公式,要准备:总数据条数 和 每页显示数据条数

继续编辑 userPage.js 代码:

// 导入用户集合构造函数
const { User } = require('../../model/user');

module.exports = async (req, res) => {
  // 接收客户端传递过来的当前页参数
  let page = req.query.page;
  // 每页显示的数据条数
  let pagesize = 5;
  // 查询用户数据的总数
  let count = await User.countDocuments({});
  // 计算总页数
  let total = Math.ceil(count / pagesize);

  // 将用户信息从数据库中查询处理
  let users = await User.find({})
  // 渲染用户列表模块
  res.render('admin/user', { users: users })
}

下面需要用到的方法:

limit(2) // limit 限制查询数量  传入每页显示的数据数量

skip(1) // skip 跳过多少条数据  传入显示数据的开始位置

2.4.3、每页开始查询位置的计算

数据开始查询位置=(当前页-1)* 每页显示的数据条数

// 页面对应的开始位置
let start = (page - 1) * pagesize;

// 将用户信息从数据库中查询处理
let users = await User.find({}).limit(pagesize).skip(start)

如果用户没有传递页面参数,默认为:1

// 接收客户端传递过来的当前页参数,如果没有传页面,默认为1
let page = req.query.page || 1;

猜你喜欢

转载自blog.csdn.net/weixin_39202130/article/details/119059128
今日推荐