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的前后端分离的思考与实践(六)Nginx + Node.js + Java 的软件栈部署实践
Sep 26 NodeJs
Nodejs实现的一个静态服务器实例
Dec 06 NodeJs
使用nodejs开发cli项目实例
Jun 03 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
NodeJS实现客户端js加密
Jan 09 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
nodejs实现截取上传视频中一帧作为预览图片
Dec 10 NodeJs
解决Nodejs全局安装模块后找不到命令的问题
May 15 NodeJs
使用nodeJS中的fs模块对文件及目录进行读写,删除,追加,等操作详解
Feb 06 NodeJs
浅谈vue websocket nodeJS 进行实时通信踩到的坑
Sep 22 NodeJs
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
Dec 14 NodeJs
详解nodejs内置模块
May 06 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和MySQL保存和输出图片
2006/10/09 PHP
PHP 网页过期时间的控制代码
2009/06/29 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
详解如何在云服务器上部署Laravel
2017/06/30 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
js中浮点型运算BUG的解决方法说明
2014/01/06 Javascript
jQuery之选项卡的简单实现
2014/02/28 Javascript
标题过长使用javascript按字节截取字符串
2014/04/24 Javascript
一个JavaScript获取元素当前高度的实例
2014/10/29 Javascript
PHP PDO操作总结
2014/11/17 Javascript
JS实现动态给图片添加边框的方法
2015/04/01 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
2015/09/12 Javascript
JavaScript脚本判断蜘蛛来源的方法
2015/09/22 Javascript
快速掌握WordPress中加载JavaScript脚本的方法
2015/12/17 Javascript
js如何获取网页所有图片
2017/05/12 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
Vue中使用clipboard实现复制功能
2018/09/05 Javascript
python中stdout输出不缓存的设置方法
2014/05/29 Python
Python urlopen()函数 示例分享
2014/06/12 Python
python轻松实现代码编码格式转换
2015/03/26 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
Java编程迭代地删除文件夹及其下的所有文件实例
2018/02/10 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
python实现单链表的方法示例
2019/09/03 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
餐馆开业致辞
2015/08/01 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
CSS浮动引起的高度塌陷问题
2022/08/05 HTML / CSS