开始前先聊聊五毛钱的:

  好久没写了,可能是因为懒(哎),写这个是好事,既帮助了自己,巩固一下知识,也可以让别人给自己纠错纠错,三月份接触到了node,先是跟着一些教程写了一些小实例,感觉自己就喜欢上了node,本人呢对于新的东西比较好奇,但由于实习的原因,并不能专心去学习,也就半了解,五月份回学校做毕设,本来要求的是使用C#,给予.net 的,在接触过后,并且做了一些就开始放弃了,个人看法,着实不喜欢使用vs,对于配置问题更是让我头疼,哪有node这么方便,建个文件夹就开始了,比较有动力!

今天也说一下使用mongodb 数据库分页,本人才疏学浅,菜鸟一枚,对于知识点理解不深(按自己的想法来):

先说起因:做一个商品信息列表,商品很多,我们就需要分页,设计的数据库方法:

find()   查询商品,

limit(),     限制显示文档个数

skip();     跳过文档个数,

本人实现方法比较笨,具体看代码:

首先,得知道商品的总数,查询数据库:

cart:function cart(userId){
return Cart.find({userId:userId,isBuy:1})
.exec()
}

再者,首次访问时,并没有点击底下的分页按钮,就得来个初始化吧,这样: pageSize :单页显示的文档数

findCart:function findCart(userId,pageSize){
return Cart.find({userId:userId,isBuy:1})
.limit(pageSize)
.exec()
},

下来就是分页的了:   Count:需要跳过的文档数,他的构成  点击的页 (num-1)*pageSize

findGoodsOrder:function findGoodsOrder(userId,pageSize,Count){
return Cart.find({userId:userId,isBuy:2})
.limit(pageSize)
.skip(Count)
.exec()
}

好了,数据库这一块就好了,再看路由处理:

当然这就是首次访问了:  将需要分的页数一块传值过去,page变量,需要构造一页面:

router.get('/cart',function(req,res,next){
var pagesSize = 4;
Promise.all([
CartModel.findCart(req.session.user._id),
CartModel.cart(req.session.user._id)
])
.then(function(result){
if(!result){
req.flash('error','出错了!');
}
var goods = result[0];
var page = Math.ceil(result[1].length/4);
req.flash('success','查找成功!');
//req.session.user.credit = parseInt(user.SecPayment);
res.render('per-cart',{
goods:goods,
page:page
});
})
.catch(next);
});

然后就是分页请求处理了:传过来的值为点击的页数码,公式,算出需要跳过几个文档数,调用函数就行了,

*注意,这次往回传的时候是,res.send();说明我们用了ajax,局部刷新页面:

  先想一想,怎么处理??再看下面。。。。

router.get('/cart/page',function(req,res,next){
var pageSize=4;
var page = (parseInt(req.query.count)-1)*4;
CartModel.findGoodsOrder(req.session.user._id,pageSize,page)
.then(function(goods){
if(!goods){
req.flash('error','出错了!');
}
req.flash('success','查找成功!');
//req.session.user.credit = parseInt(user.SecPayment);
res.send({
goods:goods
});
})
.catch(next);
});

最后,我们就转到页面层了,:

页面构造就不细说了,直接看ajax部分:

page:function(){
/**数据实现分页
* 可累死了,首先不知道如何获取点击对象的文本节点值,
* 对于ajax get/post 没有理解,
* 返回的数据处理方式,
* @type {any|jQuery|HTMLElement}
*/
var pageNum = $('.page li'); //获取页码对象
pageNum.click(function(){ //单击事件,并将这个点击对象传过去
page(this);
});
function page(obj){ //事件处理函数
for(var i =0;i<pageNum.length;i++){
pageNum[i].style.backgroundColor = '#fff'; //默认页码背景色白色
}
obj.style.backgroundColor = '#f00'; //单击对象背景色为红色
var count = obj.firstChild.nodeValue; //获取单机对象的文本节点值,
                                       //对于DOM操作没有好的理解,费好大劲,哎,技渣
$.ajax({ //ajax请求
type:'GET',
url:'/personal/order/page',
data:{
count:count
},
dataType:'json', //请求的是后台,数据类型必须设置成JSON,
success:function(data){ //不知道还能设置成其他的值不,还不清楚,
//alert('成功:'+data.data);
var goods=data.goods; //获取返回的数据,就是动态添加HTML了,
var cart = $('.cartshow');
//alert(goods[0].nodeName);
//goods[0].innerHTML='hello'
var content='<ul>';
goods.forEach(function(goods){
content+=
' <li><input type="checkbox" value="'+goods.count*goods.onePrice+'"/></li>'+
'<li><a href="/main/'+goods.goodsId+'/single">'+goods.gName+'</a></li>'+
'<li class="bigshow">'+
'<div>'+
'<img src="/images/45.jpg">'+
'<div>'+
'<label>'+goods.describe+'</label>'+
'<label>尺寸'+goods.size+'</label>'+
'</div></div></li>'+
'<li>'+goods.count+'</li>'+
'<li>'+goods.onePrice+'</li>'+
'<li>'+goods.count*goods.onePrice+'</li>'+
'<li><a href="/singleGoods/'+goods.goodsId+'/2/remove">删除</a></li>';
});
content+='</ul>'
cart[0].innerHTML = content;
lb.price();
},
error: function(jqXHR, textStatus, errorThrown){
alert('error ' + textStatus + " " + errorThrown);
}
});
}
}

大概的分页就是这样了,为什么要写,因为我遇到这个问题的时候,本来想网上一找,就算了,谁知道呢,哎,难,都是是一个模板,不知道谁拷谁的,对于新手完全看不懂,然后就放弃了,当时对于ajax也不怎么熟悉,查书,找同学讨论,可怜,周围的居然没有一个学习nodeJS的,讨论一些逻辑部分,给自己找找灵感,

大概就是一天的时间,大概是我放了大招(使用代码量能解决的问题,就不是问题),初步实现了功能。

代码还有待扩展,如果数据特别多,底下的分页码就特别多,这需要一个处理,多的省略号,周围的五个存在,如:1 ...9 10 11 12 13 .. 20

这又是一个问题,哎!想想头都大,但目前我先不做这个,以后再考虑吧,下来的工作是一个实时交互功能,论坛聊天那种,给自己加油!

有什么问题,欢迎吐糟,共同进步!

<h2>现阶段目标:能用代码量解决的问题,就不是问题!</h2>

nodeJS 中mongoose操作分页的更多相关文章

  1. mongodb学习(3)--- NodeJs使用mongoose操作mongodb

    转载: https://cnodejs.org/topic/50c145ed637ffa4155c7eaee 首先对于以下错误说明(有写 db.close): Error: db object alr ...

  2. nodejs 使用mongoose 操作mongodb

    nodejs操作mongodb可以使用mongoose: Mongoose is a MongoDB object modeling tool designed to work in an async ...

  3. Nodejs中的路径问题

    一.path核心模块 ①path.basename(path[,ext])获取一个路径中的文件名 var path=require('path'); console.log(path.basename ...

  4. nodeJS中使用mongoose模块操作mongodb数据库

    在实际运用中,对于数据库的操作我们不可能一直在cmd命令行中进行操作,一般情况下需要在node环境中来操作mongodb数据库,这时就需要引入mongoose模块来对数据库进行增删改查等操作. 首先, ...

  5. mongodb replica set 和 nodejs中使用mongoose连接replica

    一.mongodb replication 介绍 官网上的第一句话就是Replication is the process of synchronizing data across multiple ...

  6. node-express项目的搭建并通过mongoose操作MongoDB实现增删改查分页排序(四)

    最近写了一个用node来操作MongoDB完成增.删.改.查.排序.分页功能的示例,并且已经放在了服务器上地址:http://39.105.32.180:3333. Mongoose是在node.js ...

  7. mongoose 数据库操作 - 分页

    使用mongoose 加入分页方法,临时还没发现什么更好的方法,我使用的方法是,直接在源代码中加入 找到 node_modules/mongoose/lib/model.js打开这个文件.里面加入这段 ...

  8. 在nodeJS中操作文件系统(二)

    在nodeJS中操作文件系统(二)   1. 移动文件或目录 在fs模块中,可以使用rename方法移动文件或目录,使用方法如下:     fs.rename(oldPath,newPath,call ...

  9. 在nodejs中操作数据库(MongoDB和MySQL为例)

    一.使用nodejs操作MongoDB数据库 ①使用官方的mongodb包来操作 ②使用第三方的mongoose包来操作(比较常用) // 首先必须使MongoDB数据库保持开启状态 // npm下载 ...

随机推荐

  1. 新手小白快速登天日记之安装python以及环境变量和pycharm解释器较为详细教程

    Python解释器安装及环境变量配置 Python官方网站:www.python.org 首先打开这个网址,找到downloads选择,因为我是Windows所以下载windows的,因电脑而异 然后 ...

  2. [leetcode] 263. Ugly Number (easy)

    只要存在一种因数分解后,其因子是2,3,5中的一种或多种,就算是ugly数字. 思路: 以2/3/5作为除数除后,最后结果等于1的就是ugly数字 Runtime: 4 ms, faster than ...

  3. C#中面向对象编程中的函数式编程详解

    介绍 使用函数式编程来丰富面向对象编程的想法是陈旧的.将函数编程功能添加到面向对象的语言中会带来面向对象编程设计的好处. 一些旧的和不太老的语言,具有函数式编程和面向对象的编程: 例如,Smallta ...

  4. MySql 命令(命令行)

    1.连接Mysql 格式: mysql -h主机地址 -u用户名 -p用户密码1.连接到本机上的MYSQL. 首先打开DOS窗口,然后进入目录mysql\bin,再键入命令mysql -u root ...

  5. php 排序和置顶功能实现

    (1)排序操作思路 一般来说都是按照发布时间排序.时间戳大的靠前,所以用倒序desc,而不是asc (2)置顶操作思路: 点击置顶时,修改数据库addtime字段值为当前时间即可.因为排序是按照时间戳 ...

  6. springcloud-provider-consumer-register

    作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权归作者所有,转载请注明出处 上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注 ...

  7. 2.2.2python的BeautifulSoup库

    from bs4 import BeautifulSoupimport rebroken_html = '<ul class="country"><li>A ...

  8. js函数柯理化

    所谓的函数柯理化,简单来说就是,一个需要接收多个参数的函数,进行分开一个个的传递参数,当函数执行的时候,传递剩余的参数. 主要作用在于增强函数的通用性. 如下举个例子: function custom ...

  9. kafka集群跨双网段及多网段通信问题解决

    一.问题场景: 实际生产环境总存在很多kafka集群跨网段的问题.kafka集群可能存在多个网卡,对应多个网段.不同网段之间需要同时与集群通信,即跨网段生产消费问题. 二.解决方法:自定义listen ...

  10. js获取手机系统语言

    只需 navigator.language 就可以获取手机系统语言,要做国际化的童鞋可以看看 如图:(第一次是简体,第二次切换English),zh-CN,en-US是语言代码 更多语言代码,请查看h ...