如何使用Sequelize框架在Node.js里实现增删改查

前端 潘老师 4周前 (03-25) 16 ℃ (0) 扫码查看

以往,我们写SQL语句来实现数据库增删改查操作,但这不仅繁琐,还容易出错。今天就给大家分享一个实用的方法,使用Sequelize框架在Node.js中实现增删改查,彻底告别手写SQL的烦恼!

一、MySQL中的分页SQL语句

在MySQL数据库进行分页查询时,会用到这样的SQL语句:

SELECT * FROM `users` 
LIMIT offset, pageSize;

这里面有两个关键参数:offsetpageSizeoffset表示偏移量,它的计算方式是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可能出现的错误。大家赶紧动手试试吧!


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/front/16225.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】