nodejs个人博客开发第六步 数据分页


Posted in NodeJs onApril 12, 2017

本文为大家分享了nodejs个人博客开发的数据分页,具体内容如下

控制器路由定义

首页路由:http://localhost:8888/

首页分页路由:http://localhost:8888/index/2

/**
* 首页控制器
*/
var router=express.Router();
/*每页条数*/
var pageSize=4;
/*首页*/ 
router.get('/',function(req,res,next){
 var cid=0;
 F.model("article").assignIndexData(cid,1,pageSize,res);
});
/*首页分页*/
router.get('/index/:page',function(req,res,next){
 var currentPage=parseInt(req.params.page);
 var cid=0;
 F.model("article").assignIndexData(cid,currentPage,pageSize,res);
});

分类列表分页路由:http://localhost:8888/category/分类id/分页

/*分类页*/
router.get('/category/:cid/:page',function(req,res,next){
 var cid=req.params.cid;
 var currentPage=parseInt(req.params.page);
 F.model("article").assignIndexData(cid,currentPage,pageSize,res);
});

模型数据部分

控制器调用article模型的assignIndexData()方法,参数:分类id,当前页,每页条数,响应对象

调用category模型的getAllList()方法得到分类list,参数:回调函数

调用article模型的getCount()方法得到总条数,参数:分类id,回调函数

调用article模型的getArticlePager()方法得到文章对象的数据list,参数:分类id,当前页,每页条数,回调函数

对上一页,下一页进行-1和+1,并进行判断,上一页应大于0,下一页应小于等于总页数(总条数/每页条数 向上取整)

把数据分配到模板上

/**
* 文章模型文件
*/
module.exports={
 /*获取条数*/
 getCount:function(categoryId,callback){
  var condition="";
  if(categoryId!=0){
   condition="where category_id="+categoryId;
  } 
  var sql="select count(*) num from article "+condition;
  db.query(sql,callback);
 },
 /*获取分页数据*/
 getArticlePager:function(categoryId,currentPage,pageSize,callback){
  if(currentPage<=0||!currentPage) currentPage=1;
  var start=(currentPage-1)*pageSize;
  var end=pageSize;
  var condition="";
  if(categoryId!=0){
   condition="where category_id="+categoryId;
  }
  var sql="select * from article "+condition+" order by time desc limit "+start+","+end;
  db.query(sql,callback);
 },
 /*归档*/
 getArchives:function(callback){
  db.query("select time from article order by time desc",callback);
 },
 /*分配首页数据*/
 assignIndexData:function(cid,currentPage,pageSize,res){
  var categoryModel=F.model("category");
  var articleModel=this;
  // 分类数据
  categoryModel.getAllList(function(err,categoryList){
   // 文章条数
   articleModel.getCount(cid,function(err,nums){
    // 文章分页
    articleModel.getArticlePager(cid,currentPage,pageSize,function(err,articleList){
     var nextPage=(currentPage+1)>=Math.ceil(nums[0].num/pageSize) ? Math.ceil(nums[0].num/pageSize) : currentPage+1;
     var prePage=(currentPage-1)<=0 ? 1 : currentPage-1;
     // 归档
     articleModel.getArchives(function(err,allArticleTime){
      var newArticleTime=[];
      for(var i=0;i<allArticleTime.length;i++){
       newArticleTime.push(F.phpDate("y年m月",allArticleTime[i].time));
      }
      /*分配数据*/
      var data={
       categoryList:categoryList,
       articleList:articleList,
       cid:cid,
       nextPage:nextPage==0 ? 1 : nextPage,
       prePage:prePage,
       allArticleTime:newArticleTime,
       currentPage:currentPage
      };
      
      /*渲染模板*/
      res.render("home/index",data); 
     });   
    });
   });

  });
 }
};

模板部分

<nav>
   <ul class="pager">
    <li><a class="btn <%if(currentPage==prePage){%>disabled<%}%>" 
    href="/<%if(cid!=0){%>category/<%=cid%>/<%}else{%>index/<%}%><%=prePage%>" rel="external nofollow" >上一页</a></li>
    <li><a class="btn <%if(currentPage==nextPage){%>disabled<%}%>" 
    href="/<%if(cid!=0){%>category/<%=cid%>/<%}else{%>index/<%}%><%=nextPage%>" rel="external nofollow" >下一页</a></li>
   </ul>
   </nav>

效果图:

nodejs个人博客开发第六步 数据分页

nodejs个人博客开发第六步 数据分页

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
NodeJS框架Express的模板视图机制分析
Jul 19 NodeJs
NodeJS制作爬虫全过程
Dec 22 NodeJs
NodeJs基本语法和类型
Feb 13 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
Nodejs中解决cluster模块的多进程如何共享数据问题
Nov 10 NodeJs
基于NodeJS+MongoDB+AngularJS+Bootstrap开发书店案例分析
Jan 12 NodeJs
nodejs接入阿里大鱼短信验证码的方法
Jul 10 NodeJs
NodeJS设计模式总结【单例模式,适配器模式,装饰模式,观察者模式】
Sep 06 NodeJs
nodejs超出最大的调用栈错误问题
Dec 27 NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
解决nodejs的npm命令无反应的问题
May 17 NodeJs
nodejs个人博客开发第五步 分配数据
Apr 12 #NodeJs
nodejs个人博客开发第四步 数据模型
Apr 12 #NodeJs
nodejs个人博客开发第三步 载入页面
Apr 12 #NodeJs
nodejs个人博客开发第二步 入口文件
Apr 12 #NodeJs
nodejs个人博客开发第一步 准备工作
Apr 12 #NodeJs
nodejs获取微信小程序带参数二维码实现代码
Apr 12 #NodeJs
详解nodejs微信公众号开发——5.素材管理接口
Apr 11 #NodeJs
You might like
Prototype使用指南之hash.js
2007/01/10 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
JS嵌套函数调用上下文的问题解决
2014/03/26 Javascript
js仿微博实现统计字符和本地存储功能
2015/12/22 Javascript
JS监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
2016/08/05 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
react-native 完整实现登录功能的示例代码
2017/09/11 Javascript
详解使用Vue Router导航钩子与Vuex来实现后退状态保存
2017/09/11 Javascript
取消Bootstrap的dropdown-menu点击默认关闭事件方法
2018/08/10 Javascript
webpack3里使用uglifyjs压缩js时打包报错的解决
2018/12/13 Javascript
基于js Canvas实现二次贝塞尔曲线
2018/12/25 Javascript
JavaScript&quot;模拟事件&quot;的注意要点详解
2019/02/13 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
vue history 模式打包部署在域名的二级目录的配置指南
2019/07/02 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
JavaScript代码简化技巧实例解析
2020/09/09 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
在python的WEB框架Flask中使用多个配置文件的解决方法
2014/04/18 Python
Python中使用PIPE操作Linux管道
2015/02/04 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
关于Python 3中print函数的换行详解
2017/08/08 Python
查看Django和flask版本的方法
2018/05/14 Python
详解python中的json和字典dict
2018/06/22 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
python中的数组赋值与拷贝的区别详解
2019/11/26 Python
关于Kotlin中SAM转换的那些事
2020/09/15 Python
XD健身器材:Kevlar球、Crossfit健身球
2019/03/26 全球购物
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
个人公开承诺书
2014/03/28 职场文书
专升本学生毕业自我鉴定
2014/10/04 职场文书
给医院的感谢信
2015/01/21 职场文书
写给医院的感谢信
2015/01/22 职场文书
详解Python中__new__方法的作用
2022/03/31 Python
解决 Redis 秒杀超卖场景的高并发
2022/04/12 Redis