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;