Node中实现真分页的两种方式

  在项目中,通常会有分页的需求,分页有两种实现方式:真分页和假分页。假设每页要显示10条数据,真分页只查询10条数据,当进行换页的时候,只是查询到对应页数应该显示10条数据;假分页会一次性把所有数据查询出来,然后进行计算本页应该显示的10条数据。

方式一

所需内容:当前要查询的页数(page)、每一页显示的条数(pagesize)、数据的总数(count)、总页数(total)、开始查询的位置(start

作为服务器端,page是由客户端传递过来的参数,在服务器端接收即可,如果没有传递参数的话,默认是1,查询第一页的数据。

let page = req.query.page || 1;

pagesize可以由客户端传递过来,也可以在服务器端指定,这个需要看项目的需求了,如果需求中可以由用户选择每页显示的条数,那可以由客户端传递参数的方式实现,否则,可以在服务器端指定。本文采取第二种方式:

let pagesize = 10;

count数据的总数可以由服务器端查询获得。

total总页数可以通过计算获得:Math.ceil()是将数据向上取整。

let total = Math.ceil(count / pagesize)

start表示从第几条数据开始查询。

let start = (page - 1) * pagesize

从数据中查询的SQL语句:

let users = User.find({}).limit(pagesize).skip(start)

方式二

分页功能的实现依赖第三方模块mongoose-sex-page

1.安装模块mongoose-sex-page

npm install mongoose-sex-page

2.引入模块mongoose-sex-page

const pagination = require('mongoose-sex-page')

3.从数据中查询

// page 指定当前页 对于方式一的page
// size 指定每页显示的数据条数 对于方式一的pagesize
// display 指定客户端要显示的页码数量
// exec 向数据库中发送查询请求
let articles = pagination(Article).find().page(page).size(2).display(3).populate('author').exec()

  至此,两种分页实现方式就结束了,有点类似与面向过程与面向对象,方式一事事亲为,每一个变量自己去计算出来,方式二直接使用第三方模块传递参数即可。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值