nodeJS与MySQL实现分页数据以及倒序数据


Posted in NodeJs onJune 05, 2020

大家在做项目时肯定会遇到列表类的数据,如果在前台一下子展示,速度肯定很慢,那么我们可以分页展示,比如说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就不用考虑这一点,为啥会这样呢?如下:

关于使用 koa路由与mysql模块, ctx.body获取不到值的问题

var Koa = require('koa');
var Router = require('koa-router' );
var bodyParser = require('koa-bodyparser');
var mysql = require('mysql');
var app = new Koa();
var router = new Router();
app.use(bodyParser());

var connection = mysql.createConnection({
 host   : 'localhost',
 port:3306,
 user   : 'root',
 password : 'xxx',
 database : 'url'
});
connection.connect();


//第一类封装 ,一般用于不传递多个参数
const query = function (sql) {
  return new Promise((resolve, reject) => {
    connection.query(sql, function (error, results) {
      if(error){
        reject(error);
      }else{
        resolve(results)
      }
    });
  })
}
//第二类封装 ,一般用于传递多个参数
const query1 = function (userStr,name,passwd,token1) {
  return new Promise((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;
          var insertStr = `insert into login (username, password,token) values ("${name}", "${passwd}","${token1}")`;
          console.log(insertStr)
          connection.query(insertStr, function (err, res) {
            if (err) throw err;
          })
        }
        resolve(json)
      }
    });
  })
}


// 使用第一类封装
router.get( '/csdnurl', async(ctx, next) => {
 var sql = "select * from csdnurl";
  let results = await query(sql);
  ctx.body=results
});
// 使用第一类封装
router.post('/login', async (ctx, next) => {
  var name = ctx.request.body.username;
  var passwd = ctx.request.body.password;
  var userStr = `select username,password,token from login where username="${name}" and password="${passwd}"`;
  let results = await query(userStr);
  ctx.body = results
});

// 使用第二类封装
router.post('/register', async (ctx, next) => {
  var name = ctx.request.body.username;
  var passwd = ctx.request.body.password;
  var token1 = jwt.sign({
    username: name
  }, secretkey, {
    expiresIn: 60 * 8
  });
  var userStr = `select * from login where username="${name}"`;
  let results = await query1(userStr,name,passwd,token1);
  ctx.body = json
});

5、allPage是所有的页数,因为可能遇到小数的情况所以向下取整加一。

6、resolve(List) 返回给前台数据

到此这篇关于nodeJS与MySQL实现分页数据以及倒序数据的文章就介绍到这了,更多相关nodeJS MySQL分页及倒序内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

NodeJs 相关文章推荐
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
Nov 18 NodeJs
提高NodeJS中SSL服务的性能
Jul 15 NodeJs
NodeJS制作爬虫全过程(续)
Dec 22 NodeJs
NodeJs中的VM模块详解
May 06 NodeJs
nodejs实现获取当前url地址及url各种参数值
Jun 25 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
nodejs socket实现的服务端和客户端功能示例
Jun 02 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
Nodejs之http的表单提交
Jul 07 NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 NodeJs
nodejs npm错误Error:UNKNOWN:unknown error,mkdir 'D:\Develop\nodejs\node_global'at Error
Mar 02 NodeJs
NodeJS多种创建WebSocket监听的方式(三种)
Jun 04 #NodeJs
Sublime Text3 配置 NodeJs 环境的方法
May 20 #NodeJs
Nodejs实现WebSocket代码实例
May 19 #NodeJs
Nodejs文件上传、监听上传进度的代码
Mar 27 #NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 #NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 #NodeJs
nodejs制作小爬虫功能示例
Feb 24 #NodeJs
You might like
PHP VS ASP
2006/10/09 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
2014年10个最佳的PHP图像操作库
2014/07/14 PHP
两种php去除二维数组的重复项方法
2015/11/04 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
JQUERY CHECKBOX全选,取消全选,反选方法三
2008/08/30 Javascript
JS随机生成不重复数据的实例方法
2013/07/17 Javascript
使用EVAL处理jqchart jquery 折线图返回数据无效的解决办法
2015/11/26 Javascript
浅析AngularJS中的指令
2016/03/20 Javascript
微信小程序 Image API实例详解
2016/09/30 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
详解js中==与===的区别
2017/01/08 Javascript
基于JavaScript实现复选框的全选和取消全选
2017/02/09 Javascript
JS+CSS实现滚动数字时钟效果
2017/12/25 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
Vuex中mutations与actions的区别详解
2018/03/01 Javascript
详解webpack4之splitchunksPlugin代码包分拆
2018/12/04 Javascript
JavaScript装饰者模式原理与用法实例详解
2020/03/09 Javascript
Python通过future处理并发问题
2017/10/17 Python
PyQt5每天必学之QSplitter实现窗口分隔
2018/04/19 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
美国最大的袜子制造商和零售商:Renfro Socks
2017/09/03 全球购物
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
招商业务员岗位职责
2013/12/16 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
劳动工资科岗位职责范本
2014/03/02 职场文书
合作意向协议书范本
2014/03/31 职场文书
公司委托书范本
2014/04/04 职场文书
教师见习报告范文
2014/11/03 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
Python图片检索之以图搜图
2021/05/31 Python
Apache POI的基本使用详解
2021/11/07 Servers
用Python爬取英雄联盟的皮肤详细示例
2021/12/06 Python
python处理json数据文件
2022/04/11 Python