Node.js+Express+Mysql实现分页查询

news2024/10/6 1:47:29

根据记录数总数和分页数获到页总数

function pageCount (totalnum,limit){
    return totalnum > 0 ? ((totalnum < limit) ? 1 : ((totalnum % limit) ? (parseInt(totalnum / limit) + 1) : (totalnum / limit))) : 0;
}

接收请求代码

router.get('/api/user/page', async (req, res) => {

    let pageNo = req.query.pageNo;
    let pageSize = req.query.pageSize;
    const startIndex = (pageNo - 1) * pageSize;
    const queryString = `SELECT * FROM sys_user LIMIT ${startIndex}, ${pageSize}`;
    let data =  await query(queryString); 
    const countSql = 'select count(*) count from sys_user'
    let countData =  await query(countSql); 
    let count = countData[0].count;

    let pageData = {
        total : count,   
        pages : sysUtils.pageCount(count,pageSize),
        records : data
    }

    res.send({
        status: 200,
        success : true,
        message: '',
        data: pageData,
    })
})

数据库代码

const mysql = require('mysql')
const pool = mysql.createPool({
    host: '127.0.0.1',
    user: 'root',
    password: '123456',
    database: 'lzwj_data',
    port: 3306
})

function camelCaseKeys(obj) {
    const result = {};
    for (let key in obj) {
        let newKey = key[0].toLowerCase() + key.slice(1).replace(/_([a-z])/g, function($0,$1){return $1.toUpperCase();});
        result[newKey] = obj[key];
    }
    return result;
}


let query = function( sql, values ) {
  // 返回一个 Promise
  return new Promise(( resolve, reject ) => {
    pool.getConnection(function(err, connection) {
      if (err) {
        reject( err )
      } else {
        connection.query(sql, values, ( err, rows) => {
          if ( err ) {
            reject( err )
          } else {
            rows = rows.map(item => camelCaseKeys(item));
            resolve( rows )
          }
          // 结束会话
          connection.release()
        })
      }
    })
  })
}



module.exports =  query

调试:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1357516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

iOS UITextField复制、粘贴框显示为英文如何解决

问题描述&#xff1a; 使用UITextField&#xff0c;欲粘贴文本&#xff0c;长按或者双击展示的提示框显示为英文 解决方案&#xff1a; 在Xcode配置文件info,plist文件中&#xff0c;新增Localizas属性&#xff0c;填入Chinese 结果如下&#xff1a; 提示框成功展示为中文

PostgreSQL 分区

由于大量数据存储在数据库同一张表中&#xff0c;后期性能和扩展会受到影响。所以需要进行表分区&#xff0c;因为它可以将大表分成较小的表&#xff0c;从而减少内存交换问题和表扫描&#xff0c;最终提高性能。庞大的数据集被分成更小的分区&#xff0c;更易于访问和管理。 …

系列十一、(一)Sentinel简介

一、Sentinel简介 1.1、官网 【英文文档】 https://github.com/alibaba/Sentinel/wiki【中文文档】 https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 1.2、概述 1.3、功能

Matlab/F#/R进行数据分析和建模算法的经验,vb.net输给他了

微软放弃了vb.net的开发&#xff0c;但是持续花费巨资投入F#,简单一看他的语法就是qbasic ,vb6一样。鹿死谁手&#xff0c;谁能相信vb.net竟然被f#给干掉了。外面有vb6语法的python成了全球第一的编程语言,内部还有强大的教授开发的这工具扯后腿。 有人说为什么中国搞不出像mat…

【数据结构】链表简介及单链表的实现

简单不先于复杂&#xff0c;而是在复杂之后。 文章目录 1. 链表1.1 链表的概念及结构1.2 链表的分类1.3 无头单向非循环链表的实现 1. 链表 1.1 链表的概念及结构 概念&#xff1a;链表是一种物理存储结构上非连续&#xff0c;非顺序的存储结构&#xff0c;数据元素的逻辑顺序…

Jvm垃圾收集器系列之Parallel Scavenge收集器(个人见解仅供参考)

问&#xff1a;什么是Parallel Scavenge&#xff1f; 答&#xff1a;Parallel Scavenge是Java HotSpot虚拟机中的一种垃圾收集器&#xff0c;它主要用于提高应用程序的吞吐量。 问&#xff1a;Parallel Scavenge的主要目标是什么&#xff1f; 答&#xff1a;Parallel Scavenge的…

Hive - Select 使用 in 限制范围

目录 一.引言 二.Select Uid Info 1.少量 Uid 2.大量 Uid ◆ 建表 ◆ 本地 Load ◆ HDFS Load ◆ Select In 三.总结 一.引言 工业场景下 Hive 表通常使用 uid 作为用户维度构建和更新 Hive 表&#xff0c;当我们需要查询指定批次用户信息时&#xff0c;可以使用 in …

自制Java镜像发布到dockerhub公网使用

文章目录 问题现象解决制作Java镜像发布使用 问题现象 书接上回&#xff0c;上周处理了一个docker问题&#xff0c;写了篇博客&#xff1a;自定义docker镜像&#xff0c;ubuntu安装命令并导出我们使用谷歌的jib插件打包&#xff0c;详情可以参考这篇文章&#xff1a;Spring Bo…

unity C#中Array、Stack、Queue、Dictionary、HashSet优缺点和使用场景总结

文章目录 数组 (Array)列表 (List<T>)栈 (Stack<T>)队列 (Queue<T>)链表 (LinkedList<T>)哈希表 (Dictionary<TKey, TValue>) 或 HashSet<T>集合 (Collection<T>) 数组 (Array) 优点&#xff1a; 高效访问&#xff1a;通过索引可以…

uniCloud 云函数

相对于云函数&#xff0c;官方更推荐使用 云对象 新建云函数 编辑云函数 uniCloud-aliyun/cloudfunctions/hello_func/index.js use strict; exports.main async (event, context) > {let {name} eventreturn 你好&#xff0c;${name}! };云函数接收的参数从event中解构获…

二进制安装包安装Prometheus插件安装(mysql_exporter)

简介 mysql_exporter是用来收集MysQL或者Mariadb数据库相关指标的&#xff0c;mysql_exporter需要连接到数据库并有相关权限。既可以用二进制安装部署&#xff0c;也可以通过容器形式部署&#xff0c;但为了数据收集的准确性&#xff0c;推荐二进制安装。 一&#xff0c;下载安…

“百模大战:AI行业的技术竞争与发展趋势“

文章目录 每日一句正能量前言百模大战影响推理配置后记 每日一句正能量 修行不是抬起头朝天上看而是低下头学会谦卑和诚实。 前言 到目前为止&#xff0c;如果要评选2023年热度最高&#xff0c;影响力最大的一个概念&#xff0c;当属AI大模型了。这轮由ChatGPT引爆的技术热潮&…

K8S--部署SpringBoot项目实战

原文网址&#xff1a;K8S--部署SpringBoot项目实战-CSDN博客 简介 本文介绍K8S如何部署SpringBoot项目。 1.生成应用的docker镜像 把SpringBoot项目的jar包打包为docker镜像&#xff0c;见&#xff1a;Docker Compose--部署SpringBoot项目--实战-CSDN博客 创建后的镜像名称…

论文悦读(7)——NVM文件系统之Trio(SOSP‘23)文件系统

TRIO&#xff08;SOSP23&#xff09; 1. 背景&#xff08;Background&#xff09;1.1 NVM Technologis1.2 File System Customization1.3 Userspace NVM File Systems 2. 观察与动机&#xff08;Observation & Motivation&#xff09;3. 设计与实现&#xff08;Design &…

(18)Linux 实现简易版shell

前言&#xff1a;做一个 "会创建&#xff0c;会终止&#xff0c;会等待&#xff0c;会程序替换" 的简易 shell 。 1、显示提示符和获取用户输入 shell 本质就是个死循环&#xff0c;我们不关心获取这些属性的接口&#xff0c;如果要实现 shell&#xff1a; 1&…

conda环境下Could not create share link解决方法

1 问题描述 在运行chatglm-6B项目时&#xff0c;运行python web_demo.py&#xff0c;出现如下错误&#xff1a; (chatglm) [rootlocalhost ChatGLM2-6B]# python web_demo.py Loading checkpoint shards: 100%|██████████████████████████████…

scratch给数据清单排序 2023年12月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch给数据清单排序 一、题目要求 1、准备工作 2、功能实现 二、案例分析

性能优化-OpenMP基础教程(三)-Android上运行OpenMP

本文主要介绍如何在一个常规的Android手机上调试OpenMP程序&#xff0c;包括Android NDK的环境配置和使用JNI编写一个OpenMP程序运行在Android手机中。 &#x1f3ac;个人简介&#xff1a;一个全栈工程师的升级之路&#xff01; &#x1f4cb;个人专栏&#xff1a;高性能&#…

js——json对象相互转化——js基础积累

js——json对象相互转化——js基础积累 需求场景解决步骤1&#xff1a;定义一个变量接收此字段&#xff0c;方便处理解决步骤2&#xff1a; { 外面的双引号要去掉解决步骤3&#xff1a;使用正则去除参数中的\\解决步骤4&#xff1a;如果此参数必须以{开头&#xff0c;以}结尾解…

Java学校教务管理系统源码带微信小程序

运行环境&#xff1a;jdk8mysql5.7IntelliJ IDEAmaven 技术&#xff1a;springbootmybatislayuishirojquery 教务管理系统是一个基于网络的在线管理平台, 帮助学校管理教务系统&#xff0c;用一个帐号解决学校教务教学管理&#xff0c; 灵活的定制符合学校自己实际情况的教务系…