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 07 NodeJs
nodejs实现黑名单中间件设计
Jun 17 NodeJs
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
nodejs npm package.json中文文档
Sep 04 NodeJs
nodejs中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
Nodejs学习笔记之测试驱动
Apr 16 NodeJs
浅谈NodeJS中require路径问题
May 07 NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
Nodejs异步流程框架async的方法
Jun 07 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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
PHP Stream_*系列函数
2010/08/01 PHP
php中使用ExcelFileParser处理excel获得数据(可作批量导入到数据库使用)
2010/08/21 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
PHP中常用的字符串格式化函数总结
2014/11/19 PHP
php将文本文件转换csv输出的方法
2014/12/31 PHP
php正确输出json数据的实例讲解
2018/08/21 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
javascript 原型模式实现OOP的再研究
2009/04/09 Javascript
鼠标经过的文本框textbox变色
2009/05/21 Javascript
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
javascript操作字符串的原生方法
2014/12/22 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
jquery中cookie用法实例详解(获取,存储,删除等)
2016/01/04 Javascript
理解javascript模块化
2016/03/28 Javascript
bootstrap按钮插件(Button)使用方法解析
2017/01/13 Javascript
JavaScript 事件对内存和性能的影响
2017/01/22 Javascript
在nginx上部署vue项目(history模式)的方法
2017/12/28 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
[03:52]DOTA2英雄基础教程 酒仙
2013/12/23 DOTA
[42:24]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第三场 11.27
2020/12/01 DOTA
Python脚本实现格式化css文件
2015/04/08 Python
python开发中range()函数用法实例分析
2015/11/12 Python
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
为什么str(float)在Python 3中比Python 2返回更多的数字
2018/10/16 Python
Python数据可视化:幂律分布实例详解
2019/12/07 Python
虚拟环境及venv和virtualenv的区别说明
2021/02/05 Python
CSS3实现的炫酷菜单代码分享
2015/03/12 HTML / CSS
豆腐の盛田屋官网:日本自然派的豆乳面膜、肥皂、化妆水、乳液等
2016/10/08 全球购物
仓管员岗位责任制
2014/02/19 职场文书
运动会口号16字
2014/06/07 职场文书
刑事辩护授权委托书范本
2014/10/17 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
道歉的话语大全
2015/05/12 职场文书
全家福照片寄语怎么写?
2019/04/02 职场文书