大家在做项目时肯定会遇到列表类的数据,如果在前台一下子展示,速度肯定很慢,那么我们可以分页展示,比如说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) 返回给前台数据

mysql 倒序 分页_nodeJS与MySQL实现分页数据以及倒序数据相关推荐

  1. nodejs连接mysql哪个版本_nodejs连接mysql

    node连接mysql比较简单,有两种方式,一种是直接连接,一种是通过连接池连接. 1.使用nodejs直接连接mysql,代码比较少,但是意思很明显 其中host是数据库地址,user是用户名,pa ...

  2. nodejs mysql 耗硬盘_nodejs操作MySQL其实很简单

    本文概要 讲述了"如何回家取酱油瓶"跟连接数据库的关联. 2.使用sequelize.js (一个传说中的ORM技术:Object-Relational Mapping,能把关系数 ...

  3. mysql分页limit运算,MySQL的limit分页查询及性能问题

    MySQL 通过 limit 实现分页查询.limit 接收一个或两个整数型参数.如果是两个参数,第一个指定返回记录行的偏移量,第二个指定返回记录行的最大数目.初始记录行的偏移量是 0.为了与 Pos ...

  4. ajax mysql搜索_京东分页优化之Mysql优化实践

    当你和别人都能实现一个某个功能,这时候区分你们能力的不是谁干活多少,而是谁能写出效率更高的代码.比如显示一个订单列表它不仅仅是写一条SELECT SQL那么简单,我们还需要很清楚的知道这条SQL他大概 ...

  5. mysql查询 百万_MySQL百万级数据分页查询优化

    前言 当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询.对于数据库分页查询,也有很多种方法和优化的点.下面简单说一下我知道的 ...

  6. mysql limit分页_MySQL order by limit 分页数据重复问题

    黑客技术点击右侧关注,了解黑客的世界! Linux编程点击右侧关注,免费入门到精通! 程序员严选甄选正品好物,程序员生活指南! 作者丨猿码道 https://www.jianshu.com/p/544 ...

  7. MySql学习(七)排序和分页(order by limit),及存在的坑

    代码中被[]包含的表示可选,|符号分开的表示可选其一. 排序查询(order by) 电商中:我们想查看今天所有成交的订单,按照交易额从高到低排序,此时我们可以使用数据库中的排序功能来完成. 排序语法 ...

  8. SpringBoot+mysql+mybatis实现增删改查和分页查询功能模块 后端java代码

    后端开发环境搭建 远程仓库代码下载 https://gitee.com/cgbylh/CrudDemo.git 1.File->New->Project- 2.选择 Spring Init ...

  9. 上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB

    面试题 & 真实经历 面试题:在数据量很大的情况下,怎么实现深度分页? 大家在面试时,或者准备面试中可能会遇到上述的问题,大多的回答基本上是分库分表建索引,这是一种很标准的正确回答,但现实总是 ...

最新文章

  1. Android Parcelable
  2. rds本地库到rds恢复_华为云RDS备份导入到本地
  3. Linux下编译cscope,vim+ctags+cscope 常用技巧和命令
  4. 模型提效的另一条路:数据增强
  5. 【Java报错】MultipartFile 类型文件上传 Current request is not a multipart request 问题处理(postman添加MultipartFile)
  6. spring boot分层_只需5分钟即可启动并运行分层架构:: Spring Boot第1部分
  7. 服务器皮肤在哪个文件里,服务器怎么使用皮肤
  8. VSCode自定义代码片段3——url大全
  9. Druid 不仅仅是一个数据库连接池
  10. 非递归二叉树的序列打印
  11. 路由侠(连接外网工具) v1.0 官方最新版
  12. 手机电源管理芯片一般在哪
  13. [抄袭]年薪五万程序员的生活及他的理财梦
  14. Python实现某du内容下载, 保存到word文档
  15. 微信小程序 企业微信客户服务插件【联系我】自定义样式
  16. 春天该吃的时令菜 春季时令菜谱_
  17. php ws聊天,php+websocket实现在线聊天室
  18. 初级入门——认识Python语言
  19. Android美食大赏——做一名合格的吃货
  20. 计算机网络知识初步教案,高中信息技术教案(网络)-计算机网络基础知识

热门文章

  1. CentOS安装Pure-FTPd+MySQL
  2. 你知道socket.io中connect事件和connection事件的区别吗?
  3. linux下查看线程数的几种方法
  4. js解析json字符串数组
  5. 【笔试题】C语言:模拟实现strcat
  6. 黑马程序员--线程【下】
  7. sqlserver大数据归档
  8. 提高DB2数据库Web程序性能的两条规则
  9. wps大纲栏显示在右边_miui12通知栏在哪
  10. 【MM模块】Stock transfersTransfer posting 转储和调拨