egg.js Mongoose实现分页的方法
一、数据库分页查询数据的原理算法
规则:规定每页20条数据的查询方式 查询第一页(page=1): db.表名.find().skip(0).limit(20)
查询第二页(page=2): db.表名.find().skip(20).limit(20)
查询第三页(page=3): db.表名.find().skip(40).limit(20)
规则:规定每页8条数据的查询方式 查询第一页(page=1): db.表名.find().skip(0).limit(8)
查询第二页(page=2): db.表名.find().skip(8).limit(8)
查询第三页(page=3): db.表名.find().skip(16).limit(8)
查询第四页(page=4): db.表名.find().skip(24).limit(8)
总结:分页查询的sql语句
db.表名.find().skip((page-1)*pageSize).limit(pageSize)
2、 egg.js Mongoose实现分页的方法
Person.
find({
occupation: /host/,
'name.last': 'Ghost',
age: { $gt: 17, $lt: 66 },
likes: { $in: ['vaporizing', 'talking'] }
}).
limit(10).
sort({ occupation: -1 }).
select({ name: 1, occupation: 1 }).
exec(callback);
// Using query builder
Person.
find({ occupation: /host/ }).
where('name.last').equals('Ghost').
where('age').gt(17).lt(66).
where('likes').in(['vaporizing', 'talking']).
limit(10).
sort('-occupation').
select('name occupation').
exec(callback);
3、egg.js 后台代码
async index() {
var page=this.ctx.request.query.page || 1;
var pageSize=3;
//获取当前数据表的总数量
var totalNum=await this.ctx.model.Goods.find({}).count();
var goodsResult=await this.ctx.model.Goods.find({}).skip((page-1)*pageSize).limit(pageSize);
await this.ctx.render('admin/goods/index',{
list:goodsResult,
totalPages:Math.ceil(totalNum/pageSize),
page:page
});
}
4、前台页面使用jqPaginator分页插件
http://jqpaginator.keenwon.com
1、首先引入jQuery和jqPaginator
2、定义一个空的div 让这个div的class pagination
https://v3.bootcss.com/components/#pagination
3、初始化
<script>
$('#page').jqPaginator({
totalPages: <%=totalPages%>,
visiblePages: 8,
currentPage: <%=page%>,
onPageChange: function (num, type) {
console.log('当前第' + num + '页',type);
if(type=='change'){
location.href="/admin/goods?page="+num;
}
}
});
</script>
1 回复
谢谢分享 egg.js结合jq插件实现分页的思路不错