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 相关文章推荐
windows下安装nodejs及框架express
Aug 07 NodeJs
nodejs 的 session 简单使用
Jun 06 NodeJs
Nodejs进阶:核心模块net入门学习与实例讲解
Nov 21 NodeJs
Express+Nodejs 下的登录拦截实现代码
Jul 01 NodeJs
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
Sep 18 NodeJs
nodejs+express搭建多人聊天室步骤
Feb 12 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
nodejs 生成和导出 word的实例代码
Jul 31 NodeJs
NodeJs入门教程之定时器和队列
Mar 08 NodeJs
nodejs微信开发之自动回复的实现
Mar 17 NodeJs
nodejs开发一个最简单的web服务器实例讲解
Jan 02 NodeJs
linux 下以二进制的方式安装 nodejs
Feb 12 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 array_intersect()函数使用代码
2009/01/14 PHP
THINKPHP+JS实现缩放图片式截图的实现
2010/03/07 PHP
php无限级分类实现方法分析
2016/10/19 PHP
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
2020/08/03 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
ext 代码生成器
2009/08/07 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
javascript:void(0)的作用示例介绍
2013/10/28 Javascript
获取非最后一列td值并将title设为该值的方法
2013/10/30 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
jQuery异步加载数据并添加事件示例
2014/08/24 Javascript
jquery中表单 多选框的一种巧妙写法
2015/09/06 Javascript
js实现全国省份城市级联下拉菜单效果代码
2015/09/07 Javascript
JS原型与原型链的深入理解
2017/02/15 Javascript
分享19个JavaScript 有用的简写写法
2017/07/07 Javascript
详解JS数据类型的值拷贝函数(深拷贝)
2017/07/13 Javascript
用JavaScript做简易的购物车的代码示例
2017/10/20 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
vue 解决addRoutes多次添加路由重复的操作
2020/08/04 Javascript
简单介绍Python中的JSON使用
2015/04/28 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
Python如何生成树形图案
2018/01/03 Python
Python使用wget实现下载网络文件功能示例
2018/05/31 Python
Python3.5迭代器与生成器用法实例分析
2019/04/30 Python
python用match()函数爬数据方法详解
2019/07/23 Python
定义css设备类型-Media Queries图表简介及使用方法
2013/01/21 HTML / CSS
html5 拖拽及用 js 实现拖拽功能的示例代码
2020/10/23 HTML / CSS
美国瑜伽品牌:Gaiam
2017/10/31 全球购物
焊接专业毕业生求职信
2013/10/01 职场文书
《神奇的克隆》教学反思
2014/04/10 职场文书
安全先进个人材料
2014/12/29 职场文书
python 模块重载的五种方法
2021/04/24 Python
Vue鼠标滚轮滚动切换路由效果的实现方法
2021/08/04 Vue.js
vue的项目如何打包上线
2022/04/13 Vue.js