pre:环境
1.样式用的bootstrap,当然你也可以用其他的,不影响
2.express版本是4.x
3.async用的是最新版本,package.json中加的 : “async”:"*",主要是为了让分页逻辑更清晰
实现效果:
下边是具体的实现过程
一、先说路由端
var count = 0;//数据总条目
var page = 0;//总页数
var size = 9;//每页的条数
var pagenum = req.query.pagenum;
pagenum = pagenum?pagenum:1;//最终得到当前页码
//调用model中的获取方法,通过用户名获取所有分页数据
Post.get(req.session.user.name,function(err,posts){
if(err){
posts = [];
}
//task1:逻辑操作
var task1 = function(callback){
count = posts.length;//数据条目
page = Math.ceil(count/size);//得到总的页数
pagenum = pagenum<1?1:pagenum;//页码如果小于1,显示为1
pagenum = pagenum > page?page:pagenum;//如果页码大于总页数,得到最终页码
callback(null,'我是第一组数据');
}
//task2:传值
var task2 = function(callback){
//得到我们想要部分的数组
var data= posts.splice((pagenum - 1) * size, size);
callback(null,data);
}
//参数1为任务数组,参数2是回调函数
async.series([task1,task2],function(err,data){
res.render('index',{
title:'首页',
posts:data[1],//查出来的数据
page:page,//总页数
count:count,//总条目
pagenum:pagenum,//当前页码
size:size,//单页条目
});
});
});
二、view里边
<div class="pagination">
<ul>
<li><a href="#">当前第<%= pagenum %>页</a></li>
<li><a href="/?pagenum=<%- pagenum<1?1:parseInt(pagenum)-1 %>">上一页</a></li>
<li><a href="/?pagenum=<%-pagenum>page?page:parseInt(pagenum)+1%>">下一页</a></li>
<li><a href="#">共<%= page %> 页</a></li>
</ul>
</div>