大家在做项目时肯定会遇到列表类的数据,如果在前台一下子展示,速度肯定很慢,那么我们可以分页展示,比如说100条数据,每10条一页,在需要的时候加载一页,这样速度肯定会变快了。
那么这里我给大家介绍如何在nodejs环境中用mysql实现分页。
前面一些必要的配置我先不详细说了,这里主要说的是地址池的配置
1// 数据库信息 2var connection = mysql.createConnection({ 3 host : 'localhost', 4 port:3306, 5 user : 'root', 6 password : '', 7 database : 'url', 8 multipleStatements: true //这里一定要加上这个。先别管什么用,一定要加上。 9});
因为我使用的是koa框架,所以用了async 、await 。这里不做理会,下面的代码才重要。
1// 获取url 2router.post('/csdnurl', async (ctx, next) => { 3 var start = (ctx.request.body.page - 1) * 10; 4 var sql = 'SELECT COUNT(*) FROM csdnurl ORDER BY id DESC; SELECT * FROM csdnurl ORDER BY id DESC limit ' + start + ',10'; 5 let results = await query2(sql); 6 ctx.body = results 7}); 8 9const query2 = function (sql) { 10 return new Promise((resolve, reject) => { 11 connection.query(sql, function (error, results) { 12 if (error) { 13 reject(error); 14 } else { 15 var allCount = results[0][0]['COUNT(*)']; 16 var allPage = parseInt(allCount) / 10; 17 var pageStr = allPage.toString(); 18 if (pageStr.indexOf('.') > 0) { 19 allPage = parseInt(pageStr.split('.')[0]) + 1; 20 console.log(allPage) 21 } 22 var List = results[1]; 23 resolve(List) 24 } 25 }); 26 })
1、 ctx.request.body.page这里是前台传来的页数。
2、 你可以看到sql语句有两条,哈哈,这里是关键了,在地址池配置multipleStatements: true就是这个原因,如果你不加,就会报错。
3、****ORDER BY id DESC这是倒序的意思(根据id倒序)。
4、 然后我使用await 异步操作封装了一个函数,是为了能够取到results值。当然你使用了express就不用考虑这一点,为啥会这样呢?https://blog.csdn.net/qq\_39045645/article/details/101537424
**5、**allPage 是所有的页数,因为可能遇到小数的情况所以向下取整加一。
**6、****resolve(List) ** 返回给前台数据
本文转转自微信公众号前端历劫之路原创https://mp.weixin.qq.com/s/PgOwC8lWDmVYgK3Qar7Y1g,如有侵权,请联系删除。
