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 相关文章推荐
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
nodejs的10个性能优化技巧
Jul 15 NodeJs
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
Sep 26 NodeJs
用nodejs的实现原理和搭建服务器(动态)
Aug 10 NodeJs
Nodejs抓取html页面内容(推荐)
Aug 11 NodeJs
初识NodeJS服务端开发入门(Express+MySQL)
Apr 07 NodeJs
Nodejs之http的表单提交
Jul 07 NodeJs
NodeJs项目中关闭ESLint的方法
Aug 09 NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 NodeJs
nodejs使用socket5进行代理请求的实现
Feb 21 NodeJs
Nodejs实现微信分账的示例代码
Jan 19 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
.htaccess文件保护实例讲解
2011/02/06 PHP
php入门学习知识点四 PHP正则表达式基本应用
2011/07/14 PHP
php把时间戳转换成多少时间之前函数的实例
2016/11/16 PHP
Laravel 5.5 异常处理 &amp; 错误日志的解决
2019/10/17 PHP
javascript当中的代码嗅探扩展原生对象和原型(prototype)
2013/01/11 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
JS遍历页面所有对象属性及实现方法
2016/08/01 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
原生JS实现简单的无缝自动轮播效果
2018/09/26 Javascript
解决layer.open后laydate失效的问题
2019/09/06 Javascript
JS中封装axios来管控api的2种方式
2019/09/11 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
javascript实现下拉菜单效果
2021/02/09 Javascript
[02:08]DOTA2英雄基础教程 马格纳斯
2014/01/17 DOTA
利用Python进行异常值分析实例代码
2017/12/07 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
pycharm快捷键汇总
2020/02/14 Python
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
护理专业本科生自荐信
2013/10/01 职场文书
调解员先进事迹材料
2014/02/07 职场文书
材料加工工程求职信
2014/02/19 职场文书
霸气押韵的班级口号
2014/06/09 职场文书
运动会标语
2014/06/21 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
道路交通事故人身损害赔偿协议书
2014/11/19 职场文书
党员转正申请报告
2015/05/15 职场文书
于丹论语心得观后感
2015/06/15 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
用 Python 定义 Schema 并生成 Parquet 文件详情
2021/09/25 Python
APP界面设计技巧和注意事项
2022/04/29 杂记