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框架Express的模板视图机制分析
Jul 19 NodeJs
windows系统下简单nodejs安装及环境配置
Jan 08 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
nodejs实例解析(输出hello world)
Jan 03 NodeJs
简单实现nodejs上传功能
Jan 14 NodeJs
Express与NodeJs创建服务器的两种方法
Feb 06 NodeJs
NodeJs下的测试框架Mocha的简单介绍
Feb 22 NodeJs
手把手教你把nodejs部署到linux上跑出hello world
Jun 19 NodeJs
nodejs之get/post请求的几种方式小结
Jul 26 NodeJs
NodeJS实现视频转码的示例代码
Nov 18 NodeJs
NodeJS 文件夹拷贝以及删除功能
Sep 03 NodeJs
图解NodeJS实现登录注册功能
Sep 16 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计算指定日期所在周的开始和结束日期的方法
2015/03/24 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
PHP实现新型冠状病毒疫情实时图的实例
2020/02/04 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
不使用XMLHttpRequest实现异步加载 Iframe和script
2012/10/29 Javascript
AngularJS的表单使用详解
2015/06/17 Javascript
用Nodejs搭建服务器访问html、css、JS等静态资源文件
2017/04/28 NodeJs
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
JS中的防抖与节流及作用详解
2019/04/01 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
js中apply和call的理解与使用方法
2019/11/27 Javascript
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
pygame学习笔记(3):运动速率、时间、事件、文字
2015/04/15 Python
详解centos7+django+python3+mysql+阿里云部署项目全流程
2019/11/15 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
PyTorch中的C++扩展实现
2020/04/02 Python
如何理解Python中的变量
2020/06/01 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
Django多个app urls配置代码实例
2020/11/26 Python
python 递归相关知识总结
2021/03/03 Python
HTML5中Localstorage的使用教程
2015/07/09 HTML / CSS
HTML5+css3:3D旋转木马效果相册
2017/01/03 HTML / CSS
Algenist奥杰尼官网:微藻抗衰老护肤品牌
2017/07/15 全球购物
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
审核会计岗位职责
2013/11/08 职场文书
甜品蛋糕店创业计划书范文
2014/02/06 职场文书
保护环境建议书
2014/03/12 职场文书
外贸业务员求职信
2014/06/16 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
2016年春节慰问信息
2015/03/25 职场文书
妈妈别哭观后感
2015/06/08 职场文书
小学数学继续教育研修日志
2015/11/13 职场文书
2016年中秋节寄语大全
2015/12/07 职场文书
Redis集群新增、删除节点以及动态增加内存的方法
2021/09/04 Redis
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技