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中exports与module.exports的区别详细介绍
Jan 14 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
轻松创建nodejs服务器(10):处理POST请求
Dec 18 NodeJs
Nodejs的express使用教程
Nov 23 NodeJs
用nodeJS搭建本地文件服务器的几种方法小结
Mar 16 NodeJs
nodejs中使用HTTP分块响应和定时器示例代码
Mar 19 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
windows系统下更新nodejs版本的方案
Nov 24 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
详解Nodejs mongoose
Jun 10 NodeJs
nodejs实现日志读取、日志查找及日志刷新的方法分析
May 20 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 设计模式之观察者模式介绍
2012/02/22 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
typecho插件编写教程(四):插件挂载
2015/05/28 PHP
php实现base64图片上传方式实例代码
2017/02/22 PHP
PHP使用数组实现矩阵数学运算的方法示例
2017/05/29 PHP
PHP _construct()函数讲解
2019/02/03 PHP
Laravel框架实现多数据库连接操作详解
2019/07/12 PHP
使用js修改客户端注册表的方法
2013/08/09 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
使用Jasmine和Karma对AngularJS页面程序进行测试
2016/03/05 Javascript
JavaScript 2048 游戏实例代码(简单易懂)
2016/03/25 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
canvas实现流星雨的背景效果
2017/01/13 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
JavaScript展开操作符(Spread operator)详解
2019/07/20 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
vue iview实现动态新增和删除
2020/06/17 Javascript
JavaScript实现简单日历效果
2020/09/11 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
Python语言编写电脑时间自动同步小工具
2013/03/08 Python
Python中的包和模块实例
2014/11/22 Python
如何实现删除numpy.array中的行或列
2018/05/08 Python
Python切片操作深入详解
2018/07/27 Python
Python3实现的旋转矩阵图像算法示例
2019/04/03 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
物理专业大学生职业生涯规划书
2014/02/07 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
干部考核工作总结2015
2015/07/24 职场文书
提档介绍信范文
2015/10/22 职场文书
《狼王梦》读后感:可怜天下父母心
2019/11/01 职场文书