章
目
录
以往,我们写SQL语句来实现数据库增删改查操作,但这不仅繁琐,还容易出错。今天就给大家分享一个实用的方法,使用Sequelize框架在Node.js中实现增删改查,彻底告别手写SQL的烦恼!
一、MySQL中的分页SQL语句
在MySQL数据库进行分页查询时,会用到这样的SQL语句:
SELECT * FROM `users`
LIMIT offset, pageSize;
这里面有两个关键参数:offset
和pageSize
。offset
表示偏移量,它的计算方式是const offset = (current - 1) * pageSize
,其中current
代表当前页,pageSize
是每页显示的数据个数。简单来说,偏移量决定了从数据库的哪一行数据开始获取,结合每页显示的数量,就能精准地实现分页查询。
二、Sequelize的分页方法
Sequelize是一个基于Node.js的强大的ORM(对象关系映射)框架,它提供了便捷的方法来操作数据库,可以用JavaScript代码与数据库交互,而无需编写复杂的SQL语句。在Sequelize中,实现分页查询的方法是findAndCountAll(condition)
。这里的condition
是一个配置对象,用来设置查询的各种条件。
比如,我们想按照id
字段倒序排列,并且指定每页显示的数量和偏移量,可以这样写:
const condition = {
order: [['id', 'DESC']], // 按照id倒叙
limit: pageSize,
offset: offset
}
如果还需要添加过滤条件,进行模糊查询,代码可以这样调整:
const condition = {
order: [['id', 'DESC']], // 按照id倒叙
limit: pageSize,
offset: offset,
where:{
name: {
[Op.like]: `%${query.name}%`
}
}
}
下面是一个完整的示例代码,结合了Express框架,实现获取用户分页信息的接口:
// 引入express框架
const express = require('express');
// 创建路由实例
const router = express.Router();
// 引入定义好的User模型,用于与数据库中的用户表进行交互
const User = require("../models/user.js")
// 从sequelize中解构出Op对象,用于构建复杂的查询条件
const { Op } = require('sequelize');
// 获取用户分页信息的路由处理函数
router.get('/page', async (req, res) => {
try {
// 获取请求中的查询参数
const query = req.query;
// 获取当前页,若未传入则默认为1
const current = Number(query.current) || 1
// 获取每页个数,若未传入则默认为10
const pageSize = Number(query.pageSize) || 10
// 计算偏移量
const offset = (current - 1) * pageSize
// 初始化查询条件对象
const condition = {
order: [['id', 'DESC']], // 按照id倒叙
limit: pageSize,
offset: offset
}
// 如果请求参数中有name字段,添加模糊查询条件
if (query.name) {
condition.where = {
name: {
[Op.like]: `%${query.name}%`
}
}
}
// 执行分页查询,返回查询结果中的数据总数和当前页的数据行
const { count, rows } = await User.findAndCountAll(condition);
// 封装查询数据,包括数据行和分页信息
const data = {
rows,
pagination: {
total: count,
current,
pageSize
}
}
// 返回成功响应,包含状态码、提示信息和封装好的数据
res.status(200).json({
code: 200,
message: "查询成功",
data
});
} catch (err) {
// 如果发生错误,返回错误响应,包含错误信息
res.status(500).json({ error: err.message });
}
});
module.exports = router;
在这段代码里,我们先获取请求中的参数,确定当前页和每页显示的数量,计算偏移量,构建查询条件。如果有模糊查询的需求,就添加相应的条件。然后使用User.findAndCountAll(condition)
方法进行查询,并将结果封装后返回给前端。
三、进行测试
写完代码后,我们需要进行测试来确保功能正常。这里可以使用Apifox等工具进行接口测试。在Apifox中,我们可以这样设置请求参数:
- Query参数:
current
:设置为当前页码,例如1
。pageSize
:设置每页显示的数据个数,比如2
。name
:如果需要模糊查询,可以输入查询关键字,比如四
。
设置好参数后,发送请求,就能看到响应结果。正常情况下,会返回状态码200
,提示“查询成功” ,并包含查询到的数据和分页信息。如果出现错误,会返回错误信息,方便我们排查问题。
通过使用Sequelize框架,在Node.js中实现增删改查变得轻松许多,不仅提高了开发效率,还减少了因手写SQL可能出现的错误。大家赶紧动手试试吧!