nodeJS与MySQL实现分页数据以及倒序数据
大家在做项目时肯定会遇到列表类的数据,如果在前台一下子展示,速度肯定很慢,那么我们可以分页展示,比如说100条数据,每10条一页,在需要的时候加载一页,这样速度肯定会变快了。
那么这里我给大家介绍如何在nodejs环境中用mysql实现分页。
前面一些必要的配置我先不详细说了,这里主要说的是地址池的配置
//数据库信息 varconnection=mysql.createConnection({ host:'localhost', port:3306, user:'root', password:'', database:'url', multipleStatements:true//这里一定要加上这个。先别管什么用,一定要加上。 });
因为我使用的是koa框架,所以用了async、await。这里不做理会,下面的代码才重要。
//获取url router.post('/csdnurl',async(ctx,next)=>{ varstart=(ctx.request.body.page-1)*10; varsql='SELECTCOUNT(*)FROMcsdnurlORDERBYidDESC;SELECT*FROMcsdnurlORDERBYidDESClimit'+start+',10'; letresults=awaitquery2(sql); ctx.body=results }); constquery2=function(sql){ returnnewPromise((resolve,reject)=>{ connection.query(sql,function(error,results){ if(error){ reject(error); }else{ varallCount=results[0][0]['COUNT(*)']; varallPage=parseInt(allCount)/10; varpageStr=allPage.toString(); if(pageStr.indexOf('.')>0){ allPage=parseInt(pageStr.split('.')[0])+1; console.log(allPage) } varList=results[1]; resolve(List) } }); })
1、ctx.request.body.page这里是前台传来的页数。
2、你可以看到sql语句有两条,哈哈,这里是关键了,在地址池配置multipleStatements:true就是这个原因,如果你不加,就会报错。
3、ORDERBYidDESC这是倒序的意思(根据id倒序)。
4、然后我使用await异步操作封装了一个函数,是为了能够取到results值。当然你使用了express就不用考虑这一点,为啥会这样呢?如下:
关于使用koa路由与mysql模块,ctx.body获取不到值的问题
varKoa=require('koa'); varRouter=require('koa-router'); varbodyParser=require('koa-bodyparser'); varmysql=require('mysql'); varapp=newKoa(); varrouter=newRouter(); app.use(bodyParser()); varconnection=mysql.createConnection({ host:'localhost', port:3306, user:'root', password:'xxx', database:'url' }); connection.connect(); //第一类封装,一般用于不传递多个参数 constquery=function(sql){ returnnewPromise((resolve,reject)=>{ connection.query(sql,function(error,results){ if(error){ reject(error); }else{ resolve(results) } }); }) } //第二类封装,一般用于传递多个参数 constquery1=function(userStr,name,passwd,token1){ returnnewPromise((resolve,reject)=>{ connection.query(userStr,function(error,result){ if(error){ reject(error); }else{ if(result.length>0){ json['message']='用户已经存在'; json['resultCode']=1; }else{ json['message']='注册成功'; json['token']=token1; json['resultCode']=200; varinsertStr=`insertintologin(username,password,token)values("${name}","${passwd}","${token1}")`; console.log(insertStr) connection.query(insertStr,function(err,res){ if(err)throwerr; }) } resolve(json) } }); }) } //使用第一类封装 router.get('/csdnurl',async(ctx,next)=>{ varsql="select*fromcsdnurl"; letresults=awaitquery(sql); ctx.body=results }); //使用第一类封装 router.post('/login',async(ctx,next)=>{ varname=ctx.request.body.username; varpasswd=ctx.request.body.password; varuserStr=`selectusername,password,tokenfromloginwhereusername="${name}"andpassword="${passwd}"`; letresults=awaitquery(userStr); ctx.body=results }); //使用第二类封装 router.post('/register',async(ctx,next)=>{ varname=ctx.request.body.username; varpasswd=ctx.request.body.password; vartoken1=jwt.sign({ username:name },secretkey,{ expiresIn:60*8 }); varuserStr=`select*fromloginwhereusername="${name}"`; letresults=awaitquery1(userStr,name,passwd,token1); ctx.body=json });
5、allPage是所有的页数,因为可能遇到小数的情况所以向下取整加一。
6、resolve(List)返回给前台数据
到此这篇关于nodeJS与MySQL实现分页数据以及倒序数据的文章就介绍到这了,更多相关nodeJSMySQL分页及倒序内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!