当前位置: 首页 > news >正文

expressjs,MySQL,实现分页查询接口

在 Express.js 中实现一个分页查询接口,并使用 MySQL 作为数据库,你可以按照以下步骤进行。我们将使用 mysql2 库来连接 MySQL 数据库,并使用 sequelize 或直接编写 SQL 查询来实现分页功能。

1. 安装必要的依赖

首先,你需要安装 expressmysql2 库。如果你打算使用 Sequelize ORM,也可以安装 sequelize

npm install express mysql2
# 如果你打算使用 Sequelize
# npm install sequelize mysql2

2. 设置 Express 应用和 MySQL 连接

创建一个 app.js 文件,并设置 Express 应用和 MySQL 连接。

const express = require('express');
const mysql = require('mysql2/promise');const app = express();
const port = 3000;// MySQL 连接配置
const dbConfig = {host: 'localhost',user: 'root',password: 'yourpassword',database: 'yourdatabase'
};let connection;// 连接到 MySQL 数据库
mysql.createConnection(dbConfig).then(conn => {connection = conn;console.log('Connected to MySQL');app.listen(port, () => {console.log(`Server is running on http://localhost:${port}`);});}).catch(err => {console.error('Error connecting to MySQL:', err);});// 定义一个关闭服务器的函数,以便在进程退出时关闭数据库连接
const shutdown = () => {connection.end();process.exit(0);
};process.on('SIGTERM', shutdown);
process.on('SIGINT', shutdown);

3. 实现分页查询接口

接下来,我们实现一个分页查询接口。假设我们有一个名为 users 的表,并且我们想要分页查询用户数据。

app.get('/users', async (req, res) => {const { page = 1, limit = 10 } = req.query;const offset = (page - 1) * limit;try {const [rows, fields] = await connection.execute('SELECT * FROM users LIMIT ? OFFSET ?',[limit, offset]);const totalRows = await connection.execute('SELECT COUNT(*) AS total FROM users')[0][0].total;const totalPages = Math.ceil(totalRows / limit);res.json({page: parseInt(page),limit: parseInt(limit),totalPages: parseInt(totalPages),totalRows: parseInt(totalRows),data: rows});} catch (err) {console.error('Error executing query:', err);res.status(500).json({ error: 'Internal Server Error' });}
});

4. 完整代码

将上述代码片段组合在一起,得到完整的 app.js 文件:

const express = require('express');
const mysql = require('mysql2/promise');const app = express();
const port = 3000;// MySQL 连接配置
const dbConfig = {host: 'localhost',user: 'root',password: 'yourpassword',database: 'yourdatabase'
};let connection;// 连接到 MySQL 数据库
mysql.createConnection(dbConfig).then(conn => {connection = conn;console.log('Connected to MySQL');app.listen(port, () => {console.log(`Server is running on http://localhost:${port}`);});}).catch(err => {console.error('Error connecting to MySQL:', err);});// 分页查询接口
app.get('/users', async (req, res) => {const { page = 1, limit = 10 } = req.query;const offset = (page - 1) * limit;try {const [rows, fields] = await connection.execute('SELECT * FROM users LIMIT ? OFFSET ?',[limit, offset]);const totalRows = await connection.execute('SELECT COUNT(*) AS total FROM users')[0][0].total;const totalPages = Math.ceil(totalRows / limit);res.json({page: parseInt(page),limit: parseInt(limit),totalPages: parseInt(totalPages),totalRows: parseInt(totalRows),data: rows});} catch (err) {console.error('Error executing query:', err);res.status(500).json({ error: 'Internal Server Error' });}
});// 定义一个关闭服务器的函数,以便在进程退出时关闭数据库连接
const shutdown = () => {connection.end();process.exit(0);
};process.on('SIGTERM', shutdown);
process.on('SIGINT', shutdown);

5. 运行应用

确保你的 MySQL 数据库正在运行,并且有一个名为 users 的表。然后运行你的 Express 应用:

node app.js

现在,你可以通过访问 http://localhost:3000/users?page=1&limit=10 来获取分页的用户数据。

注意事项

  1. 安全性:在生产环境中,请确保对输入进行验证和清理,以防止 SQL 注入攻击。
  2. 错误处理:添加更详细的错误处理,以便在出现问题时能够更容易地调试。
  3. 性能:对于大型数据集,考虑使用索引来优化查询性能。

希望这能帮助你实现分页查询接口!


http://www.mrgr.cn/news/44196.html

相关文章:

  • Vue - 打包部署
  • 如何避免任务延误:从原因到策略的全面解析
  • 18448 最小生成树
  • 使用树莓派搭建音乐服务器
  • AI配音(声音克隆)
  • Windows搭建RTMP服务器
  • 排队打水(贪心)
  • 使用frp将树莓派穿透到外网
  • MySQL 实验 7:索引的操作
  • TypeScript:装饰器
  • springboot文件上传(阿里云oss)
  • 重学SpringBoot3-集成Redis(三)之注解缓存策略设置
  • PPPoE协议个人理解+报文示例+典型配置-RFC2516
  • 制作离线版Koczkatamas工具包
  • C++模版SFIANE应用踩的一个小坑
  • Redis Stack十部曲之五:管理Redis
  • Android 组件化利器:WMRouter 与 DRouter 的选择与实践
  • 系统架构设计师论文《论SOA在企业集成架构设计中的应用》精选试读
  • 如何在 MySQL 中实现数据压缩
  • 【C++11】新特性