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 npm install全局安装和本地安装的区别
Jun 05 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
使用DNode实现php和nodejs之间通信的简单实例
Jul 06 NodeJs
Nodejs实现短信验证码功能
Feb 09 NodeJs
配置nodejs环境的方法
May 13 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
nodejs发送http请求时遇到404长时间未响应的解决方法
Dec 10 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
nodejs实现的连接MySQL数据库功能示例
Jan 25 NodeJs
nodejs异步编程基础之回调函数用法分析
Dec 26 NodeJs
nodejs脚本centos开机启动实操方法
Mar 04 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
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
解读PHP中的垃圾回收机制
2015/08/10 PHP
PHP加密3DES报错 Call to undefined function: mcrypt_module_open() 如何解决
2016/04/17 PHP
PHP将字符串首字母大小写转换的实例
2017/01/21 PHP
PHP简单验证码功能机制实例详解
2019/03/27 PHP
javascript object array方法使用详解
2012/12/03 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
2015/12/24 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
学习Angularjs分页指令
2016/07/01 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
JavaScript实现星级评价效果
2019/05/17 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
VUE中V-IF条件判断改变元素的样式操作
2020/08/09 Javascript
[48:30]LGD vs infamous Supermajor小组赛D组 BO3 第一场 6.3
2018/06/04 DOTA
python正则匹配抓取豆瓣电影链接和评论代码分享
2013/12/27 Python
python中实现定制类的特殊方法总结
2014/09/28 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
Python 专题六 局部变量、全局变量global、导入模块变量
2017/03/20 Python
Python实现单词翻译功能
2017/06/06 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
分析python请求数据
2018/08/19 Python
浅析python的Lambda表达式
2019/02/27 Python
Python实现语音识别和语音合成功能
2019/09/20 Python
常用python爬虫库介绍与简要说明
2020/01/25 Python
HTML5单页面手势滑屏切换原理
2016/03/21 HTML / CSS
澳大利亚首个在线预订旅游网站:Wotif
2017/07/19 全球购物
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
全球异乡人的跨境社交电商平台:Kouhigh口嗨网
2020/07/24 全球购物
学生自我鉴定
2013/12/18 职场文书
出差报告格式模板
2014/11/06 职场文书
大学生入党自传2015
2015/06/26 职场文书
安全责任协议书范本
2016/03/23 职场文书
话题作文之学会尊重
2019/12/16 职场文书
Python 中random 库的详细使用
2021/06/03 Python