最近做项目的时候,有一个接口需要分页处理,就是每页返回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}));
}
})
})
});

更多相关文章

  1. mysql数据库连接查询
  2. 关于mysql无法添加中文数据的问题以及解决方案
  3. MySQL学习笔记_时间,多表更新,数据库元数据
  4. MySQL数据库root账户的设置和管理
  5. 【数据库管理工具】Navicat安装及使用教程
  6. mysql数据库100万条数据插入采用jdbc的各种方式效率对比。
  7. JSON保存在数据库中并使用JQuery加载
  8. MySQL数据库表名、列名、别名区分大小写的问题
  9. Android应用程序与外部数据库之间的安全性

随机推荐

  1. 最后一天送点福利,为您2019添砖加瓦~
  2. 月入三万,我能少了你一个鸡蛋?
  3. 深入浅出 JavaScript 中的For循环之详解
  4. 004. 寻找两个正序数组的中位数 | Leetco
  5. 自学编程的八大误区!克服它!
  6. webpack4配置详解之慢嚼细咽
  7. “狗屁不通文章生成器”项目登顶GitHub热
  8. 005. 最长回文子串 | Leetcode题解
  9. 大家好 这就是2018年的我~
  10. Linux环境都没有,怎么学编程?憋说了,肝!(保姆