Mysql 数据分页处理(Node.js的实现)

最近做项目的时候,有一个接口需要分页处理,就是每页返回20条数据:比如:https://api.cn?pagg=1
这里的page就是需要获取的哪一页数据的请求参数,返回的json,当然就是返回给前台需要的数据。

实例

PC端

这里写图片描述
这个做PC端是比较常见的,这个其实需要后端返回一个必须要的数据,就是总的条数,至于每页多少条这个是需求定的,当然还有的就是当前的页数和当前页数的数据。
比如下面的数据:

{
 "total": 1836,   // 总的条数
 "ret_code": 0,
 "totalPages": 92,  // 总页数
 "currentPage": 1   // 当前页数
 "bookList": [     // 当前页 的数据
   {
     "summary": "",
     "id": 3,
     "bookclass": 1,
     "author": "张峰",
     "count": "0",
     "name": "从宝宝排泄物看",
     "fcount": 0,
     "img": "http://www.yi18.net/img/book/00003.jpg",
     "rcount": 0,
     "from": "张峰"
   },
   ……
   ]
}

手机端

手机端其实也基本是这样的,差别在于手机端页面是下拉刷新或者上拉加载更多。HBuilder webApp开发(二)表格上拉加载更多下拉刷新[2017.05.24更新]这是之前写的一个实现表格上拉加载更多下拉刷新功能的手机页面。其实后端需要返回的数据和上面的一样。

后端实现

获取接口请求参数

这个不同后端语言或者框架有不同获取方式,但是思路基本一样。获取这个参数是为了拼接sql语句的。

查询总条数

我使用的是Mysql,SELECT COUNT(*) FROM record这里的record是表名。这条sql语句就可以获取到当前表中的数据总条数,当然有限制条件的就有点不一样。

分页处理

下面就是重点了,分页。
首先看看需求,每次取20条。那么就有一个位置的偏移了。第一次是0~19,第二次是20~29,依次下去。但是接口里面的第一页通常参数会传递一个1过来。

var start = (page - 1) * 20;
var sql = 'SELECT * FROM record limit ' + start + ',20';

这里的sql语句,里面的start就是每次查村的起始点,后面的20就是位置偏移,也就是每次需要查询的条数。
这里的sql语句,难点就是limit的使用。

思路

上面似乎分析了很多,下面再来整理一下思路。

  1. 分析需求,每次获取20条数据;
  2. 前端需要显示当前页,总条数,当前页面的数据;
  3. 后端,获取总条数,获取需要查询的数据,处理总页数

具体代码实现

router.all('/api', function(req, res, next){
    var param = '';
    if (req.method == "POST") {
        param = req.body;
    } else{
        param = req.query || req.params; 
    }
    if (param.page == '' || param.page == null || param.page == undefined) {
        res.end(JSON.stringify({msg:'请传入参数page',status:'102'}));
        return;
    }
    var start = (param.page - 1) * 20;
    var sql = 'SELECT COUNT(*) FROM record; SELECT * FROM record limit ' + start + ',20'; 
    pool.getConnection(function(err, connection) {
        if(err) throw err;
        connection.query(sql,function (err, results) {
            connection.release();
            if (err){
                throw err
            }else{
                // 计算总页数
                var allCount = results[0][0]['COUNT(*)'];
                var allPage = parseInt(allCount)/20;
                var pageStr = allPage.toString();
                // 不能被整除
                if (pageStr.indexOf('.')>0) {
                    allPage = parseInt(pageStr.split('.')[0]) + 1; 
                }
                var userList = results[1];
                res.end(JSON.stringify({msg:'操作成功',status:'100',totalPages:allPage,currentPage:param.page,data:userList}));
           }
        })
    })
});
Node.js MySQL开源项目是一个使用Node.jsMySQL数据库开发的项目。这个项目使用了Node.js作为服务器端的开发语言,并通过MySQL数据库进行数据存储和管理。在这个项目中,我们使用了一些常见的数据库操作,如创建表、插入数据、查询数据等。通过这个项目,可以学习如何使用Node.jsMySQL开发一个具有基本数据库功能的应用程序。具体来说,我们可以通过使用Node.js的express框架来创建一个web服务器,并使用数据库操作模块来连接和操作MySQL数据库。在这个项目中,我们还可以实现一些功能,如分页查询数据、用户注册和登录、发布博客等。的来说,Node.js MySQL开源项目是一个很好的学习和实践Node.jsMySQL数据库的项目。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [node.js 开发指南 – Node.js 连接 MySQL 并进行数据库操作](https://download.csdn.net/download/weixin_38682406/14875912)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [基于NodeJs+Express+MySQL 实现的个人博客完整项目](https://blog.csdn.net/weixin_45932821/article/details/127854901)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值