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中实现阻塞实例
Mar 24 NodeJs
Nodejs全局安装和本地安装的不同之处
Jul 04 NodeJs
详解Nodejs基于mongoose模块的增删改查的操作
Dec 21 NodeJs
nodeJs链接Mysql做增删改查的简单操作
Feb 04 NodeJs
nodejs 图解express+supervisor+ejs的用法(推荐)
Sep 08 NodeJs
nodeJS微信分享
Dec 20 NodeJs
nodejs中Express与Koa2对比分析
Feb 06 NodeJs
CentOS7中源码编译安装NodeJS的完整步骤
Oct 13 NodeJs
通过Nodejs搭建网站简单实现注册登录流程
Jun 14 NodeJs
Nodejs libuv运行原理详解
Aug 21 NodeJs
nodeJs项目在阿里云的简单部署
Nov 27 NodeJs
ubuntu系统下使用pm2设置nodejs开机自启动的方法
May 12 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
单点登录 Ucenter示例分析
2013/10/29 PHP
从零开始学YII2框架(四)扩展插件yii2-kartikgii
2014/08/20 PHP
PHP程序员的技术成长规划
2016/03/25 PHP
微信支付开发订单查询实例
2016/07/12 PHP
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
Json对象替换字符串占位符实现代码
2010/11/17 Javascript
jquery+css+ul模拟列表菜单具体实现思路
2013/04/15 Javascript
javascript简单事件处理和with用法介绍
2013/09/16 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
js焦点文字滚动效果代码分享
2015/08/25 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
vue时间格式化实例代码
2017/06/13 Javascript
mongoose设置unique不生效问题的解决及如何移除unique的限制
2017/11/07 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
解决vue-quill-editor上传内容由于图片是base64的导致字符太长的问题
2018/08/20 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
vue实现tab栏点击高亮效果
2020/08/19 Javascript
Python实现对比不同字体中的同一字符的显示效果
2015/04/23 Python
浅析Python的Django框架中的Memcached
2015/07/23 Python
Python中list初始化方法示例
2016/09/18 Python
Python中optparser库用法实例详解
2018/01/26 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
python获取时间及时间格式转换问题实例代码详解
2018/12/06 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
Python读取stdin方法实例
2019/05/24 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
使用Python操作MySQL的小技巧
2020/09/10 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
C#和SQL Server的面试题
2016/08/12 面试题
教师旷工检讨书
2015/08/15 职场文书
Django migrate报错的解决方案
2021/05/20 Python