Node实现分页中间件,超简单

424 阅读3分钟

 

1为啥要分页:

       后端在处理数据时进行分页有几个主要的原因:

 

减少数据传输量:当数据量很大时,一次性将所有数据返回给前端可能会导致网络传输延迟和资源占用过多。通过分页,可以将数据分成多个页面或批次进行传输,减少单次传输的数据量,提高传输效率。

 

优化性能:分页可以减轻服务器的负载,特别是当需要处理大量数据时。只返回当前页的数据可以减少数据库查询或其他数据处理操作的工作量,从而提高查询性能和响应速度。

 

提供更好的用户体验:分页可以将大量数据划分成多个页面,用户可以根据需要逐页浏览或跳转到特定的页面,提供更友好的用户界面和浏览体验。

 

避免内存溢出:当数据量非常庞大时,一次性加载所有数据可能会导致内存溢出的问题。通过分页加载数据,可以限制每次加载的数据量,有效避免内存溢出的风险。

 

分页通常涉及两个关键参数:页码(page)和每页数据量(pageSize)。后端通过接收这些参数,并结合数据查询或处理的逻辑,返回相应页码和每页数据量的数据结果。

 

总的来说,后端进行分页可以提高系统性能、降低网络开销,并提供更好的用户体验,特别是在处理大量数据时。

 

 

2.如入何实现

1.封装中间件

实现思路使用limit ,使用mysql 的分页查询性能高查询速度快。

 

当需要进行分页查询时,使用MySQL的LIMIT语句可以提供高效的查询速度和性能。

 

思路如下:假设每页显示的数据量为pageSize,需要查询第pageNum页的数据。那么可以使用LIMIT语句来限制查询结果的范围,具体格式为LIMIT (pageNum-1)*pageSize, pageSize。

 

例如,如果要查询第1页,pageSize为5,那么LIMIT 0,5表示查询从第0条到第4条的数据,即第1页的数据。如果要查询第2页,依然是pageSize为5,那么LIMIT 5,5表示查询从第5条到第9条的数据,即第2页的数据。

 

这样,每次翻页时,只需要根据当前页码pageNum和每页数据量pageSize计算出对应的LIMIT参数即可,从而实现快速查询和分页展示数据的功能。

 

总结:通过利用MySQL的LIMIT语句,并根据当前页码和每页数据量计算合适的参数,可以高效地进行分页查询,提升查询速度和性能。

 

代码实现

// 分页的中间件

exports.sqlpage = (req, res, next) => {

     // 对SQL语句进行分页

     let pageNum = 1;//页码

     let pageSize = 5;//设置初始数据条数

     if (req.method == 'GET') {//判断请求方式

          if (req.query.pageNum != undefined) {//判断是否传入pageNum

               pageNum = req.query.pageNum

          }

          if (req.query.pageSize != undefined) {

               pageSize = req.query.pageSize

          }

     }

     if (req.method == 'POST') {

          if (req.body.pageNum != undefined) {

               pageNum = req.body.pageNum

 

          }

          if (req.body.pageSize != undefined) {

               pageSize = req.body.pageSize

          }

     }

     req.limit = `limit ${(pageNum - 1) * pageSize},${pageSize}`//将拼接好的limit语句挂载到req

     next()

}

引入使用

const page = require("./../tool/pages")

 

 

针对某个接口·独立引用

image.png

如果想全局引用直接app.use就可以

查询拼接代码

 const sql = "select * from `auditor_application`" + req.limit

引入req.limit即可

 

效果如下

image.png