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 Post请求报socket hang up错误的解决办法
Sep 25 NodeJs
nodejs实现获取某宝商品分类
May 28 NodeJs
Nodejs学习item【入门手上】
May 05 NodeJs
nodeJs内存泄漏问题详解
Sep 05 NodeJs
nodejs搭建本地http服务器教程
Mar 13 NodeJs
详解nodejs微信公众号开发——3.封装消息响应模块
Apr 10 NodeJs
详解Nodejs之静态资源处理
Jun 05 NodeJs
nodejs微信开发之接入指南
Mar 17 NodeJs
使用nodejs分离html文件里的js和css详解
Apr 12 NodeJs
Nodejs监听日志文件的变化的过程解析
Aug 04 NodeJs
详解NodeJs项目 CentOs linux服务器线上部署
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获取域名的google收录示例
2014/03/24 PHP
php之Smarty模板使用方法示例详解
2014/07/08 PHP
php中的ini配置原理详解
2014/10/14 PHP
PHP多线程之内部多线程实例分析
2015/03/09 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
PHP面向对象程序设计模拟一般面向对象语言中的方法重载(overload)示例
2019/06/13 PHP
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
Bootstrap的fileinput插件实现多文件上传的方法
2016/09/05 Javascript
BootStrap框架个人总结(bootstrap框架、导航条、下拉菜单、轮播广告carousel、栅格系统布局、标签页tabs、模态框、菜单定位)
2016/12/01 Javascript
Node.js中文件操作模块File System的详细介绍
2017/01/05 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
Vue 实现分页与输入框关键字筛选功能
2020/01/02 Javascript
Python实现CET查分的方法
2015/03/10 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
python tkinter图形界面代码统计工具(更新)
2019/09/18 Python
利用python汇总统计多张Excel
2020/09/22 Python
用Python进行websocket接口测试
2020/10/16 Python
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
6号汽车旅馆预订:Motel 6
2018/02/11 全球购物
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
毕业生精彩的自我评价分享
2013/10/06 职场文书
体育教师工作总结的自我评价
2013/10/10 职场文书
毕业生应聘幼儿园的自荐信
2013/11/20 职场文书
2015年小学开学寄语
2015/02/27 职场文书
丧事主持词
2015/07/02 职场文书
互联网创业商业模式以及赚钱法则有哪些?
2019/10/12 职场文书
python 利用 PIL 将数组值转成图片的实现
2021/04/12 Python
详解Vue项目的打包方式(生成dist文件)
2022/01/18 Vue.js