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