expressjs,MySQL,实现分页查询接口
在 Express.js 中实现一个分页查询接口,并使用 MySQL 作为数据库,你可以按照以下步骤进行。我们将使用 mysql2
库来连接 MySQL 数据库,并使用 sequelize
或直接编写 SQL 查询来实现分页功能。
1. 安装必要的依赖
首先,你需要安装 express
和 mysql2
库。如果你打算使用 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
来获取分页的用户数据。
注意事项
- 安全性:在生产环境中,请确保对输入进行验证和清理,以防止 SQL 注入攻击。
- 错误处理:添加更详细的错误处理,以便在出现问题时能够更容易地调试。
- 性能:对于大型数据集,考虑使用索引来优化查询性能。
希望这能帮助你实现分页查询接口!
原文地址:https://blog.csdn.net/xuelian3015/article/details/142733139
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!