源码地址:https://github.com/RidingACodeToStray/Nodejs_blog
主要功能点:
1)数据库的分页查询
2)前台分页传参
3)后端分页数据返回
4)页头和页尾的分页处理
实现思路:
前端点击上一页或者下一页的时候将下一页的page信息传到后台,前提是前端的page为当前页信息,因此需要后台将page返回;
后台获取前端传过来的page信息req.query.page默认page为1,现在使用数据库模型的count方法查询总条数返回前端,计算出总页数pages,并设置每页长度limit;
后端根据page信息计算出查询需要忽略的当前页前条数skip并忽略掉;
前端模板接受当前页page,总页数pages,总条数count,每页条数limit信息展示出来;
将分页代码分离成模板,便于其他页面重复利用,使用模板的include方法引入。
1.前端分页模板
在views/admin新建page.html作为分页模板,写好对应参数
<div class="a-page">
<span><a href="/admin/user?page={{page-1}}">上一页</a></span>
<span class="a-pageInfo">
当前第{{page}}页,每页{{limit}}条,共{{pages}}页{{count}}条数据
</span>
<span><a href="/admin/user?page={{page+1}}">下一页</a></span>
</div>
在views/admin/user_index.html引入分页模板
{% include 'page.html' %}
2.后端数据处理
查询数据库总条数count,根据总条数计算总页数pages,验证当前页数page和当前页应忽略的条数
views/routers/admin.js
//用户管理
router.get('/user',function(req,res){
//limit()限制获取的用户条数
//skip()忽略数据的查询
var page = Number(req.query.page) || 1;
var limit = 2;
var pages = 0;
User.count().then(function(count){
//计算总页数向上取整
pages = Math.ceil(count / limit);
//page取值不能超过pages,去总页数和page中的最小值
page = Math.min(page,pages);
//page取值不能小于1
page = Math.max(page,1);
var skip = (page -1 ) * limit;
//从数据中读取所有的用户数据
User.find().limit(limit).skip(skip).then(function(users){
// console.log(users);
res.render('admin/user_index',{
userInfo:req.userInfo,
users:users,
page:page,
count:count,
pages:pages,
limit:limit
});
});
})
})