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获取本机内网和外网ip地址的实现代码
Jun 01 NodeJs
nodejs 提示‘xxx’ 不是内部或外部命令解决方法
Nov 20 NodeJs
nodejs中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
轻松创建nodejs服务器(3):代码模块化
Dec 18 NodeJs
nodejs如何获取时间戳与时间差
Aug 03 NodeJs
解决nodejs中使用http请求返回值为html时乱码的问题
Feb 18 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
ubuntu编译nodejs所需的软件并安装
Sep 12 NodeJs
详解Nodejs 通过 fs.createWriteStream 保存文件
Oct 10 NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 NodeJs
nodejs多版本管理总结
Apr 03 NodeJs
NodeJS http模块用法示例【创建web服务器/客户端】
Nov 05 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执行速率优化技巧小结
2008/03/15 PHP
php5.3 goto函数介绍和示例
2014/03/21 PHP
php自动识别文件编码并转换为UTF-8的方法
2014/06/12 PHP
PHP中加密解密函数与DES加密解密实例
2014/10/17 PHP
Symfony查询方法实例小结
2017/06/28 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
JS 对象介绍
2010/01/20 Javascript
在JavaScript里防止事件函数高频触发和高频调用的方法
2014/09/06 Javascript
jQuery弹簧插件编写基础之“又见弹窗”
2015/12/11 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
JS实现搜索框文字可删除功能
2016/12/28 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
js如何找出字符串中的最长回文串
2018/06/04 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
js前端面试之同步与异步问题详解
2019/04/03 Javascript
Weex开发之WEEX-EROS开发踩坑(小结)
2019/10/16 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
python中set()函数简介及实例解析
2018/01/09 Python
Python中xml和json格式相互转换操作示例
2018/12/05 Python
Django框架会话技术实例分析【Cookie与Session】
2019/05/24 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Python实现word2Vec model过程解析
2019/12/16 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
Python *args和**kwargs用法实例解析
2020/03/02 Python
Python decimal模块使用方法详解
2020/06/08 Python
pyCharm 实现关闭代码检查
2020/06/09 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
美国婴儿和儿童家具网上商店:ABaby.com
2018/07/02 全球购物
聘任书的写作格式及范文
2014/03/29 职场文书
倡议书的写法
2014/08/30 职场文书
2015年个人实习工作总结
2014/12/12 职场文书
2016年“我们的节日·端午节”活动总结
2016/04/01 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
python实现手机推送 代码也就10行左右
2022/04/12 Python