Egg.js 接 MySQL 数据库:Sequelize 教程,6 步做出带分页的用户增删改查接口

发布时间:2026/10/22 12:51:16

Egg.js 接 MySQL 数据库:Sequelize 教程,6 步做出带分页的用户增删改查接口 Egg.js 接 MySQL 数据库Sequelize 教程6 步做出带分页的用户增删改查接口【免费下载链接】hotgoHotGo 是AI 赋能企业级全栈前后端分离开发及移动应用基础平台基于 Vue 和 GoFrame2.0 构建内置 AI 开发规范、适配主流 AI 开发工具人机协同高效开发。集成 jwt 鉴权、动态路由菜单、casbin 鉴权、消息队列、定时任务等功能预置各类常用场景文件助力专注业务开发。项目地址: https://gitcode.com/GitHub_Trending/ho/hotgo本文用 Egg.js 搭配 Sequelize ORM 连接 MySQL 数据库手把手做出一个支持分页的用户增删改查接口。全程围绕一条任务主线推进从空项目起步到接口能返回数据为止每一步都只写跑通所必需的东西。1. 先定目标一条带分页的用户列表动手之前先把交付物说清楚在 Egg.js 项目里做出一组/api/users接口覆盖列表分页、详情、新建、更新、删除五种操作数据全部读写 MySQL。拆成 6 步初始化项目、装依赖启用 egg-sequelize 插件配置数据库连接定义 User 模型写 service 与 controller注册路由并验证初始化项目在你想放代码的目录下执行npx egg-init my-egg-app --typesimple cd my-egg-app npm install再补三个依赖npm install egg-sequelize sequelize mysql2 --save三者分工明确sequelize是 ORM 本体mysql2是 MySQL 驱动egg-sequelize负责把前两者挂进 Egg.js 的生命周期让app.model在启动时就绪。装完重启应用插件会自动初始化连接池。2. 3 行配置连上 MySQL裸写 SQL维护到第三张表就崩了字段拼错了、转义漏了、分页算歪了全是手滑空间。ORM 可以理解为替你和数据库对话的翻译官你传 JavaScript 对象进去它还你对象出来中间的 SQL 由它生成。启用插件打开config/plugin.js两行启用exports.sequelize { enable: true, package: egg-sequelize, };配连接参数在config/config.default.js里补上连接信息config.sequelize { dialect: mysql, host: 127.0.0.1, database: your_database, username: root, password: your_password, };两个小建议账号密码别提交进共享仓库建议放到本地config/local.js里覆盖默认值dialect想换 PostgreSQL 或 SQLite 时改这一行并装上对应驱动即可。保存后启动项目控制台没有连接报错就说明 Egg.js 和数据库已经握手成功。3. Sequelize 模型定义一个文件描述一张表模型Model是 ORM 里表的映射你只需要声明字段和类型查询、建表、校验都围绕它展开。在app/model/下新建user.jsmodule.exports app { const { STRING, INTEGER } app.Sequelize; return app.model.define(user, { id: { type: INTEGER, primaryKey: true, autoIncrement: true }, name: STRING(30), age: INTEGER, email: STRING(100), }); };几个容易忽略的点字段名用下划线命名如created_atSequelize 默认会映射成蛇形列名模型默认带created_at、updated_at两个时间戳写入时自动填充不用手写开发阶段可以用app.model.sync()让 Sequelize 根据模型自动建表生产环境建议改用迁移脚本管理表结构避免误改线上表。4. 把增删改查写进 service 和 controllerEgg.js 的惯例是分层controller 只管收参数、回响应service 管查询逻辑。这样同一个查询方法以后能被定时任务、其他接口复用。service 里写分页查询新建app/service/user.jsconst { Service } require(egg); class UserService extends Service { async page({ page 1, pageSize 10 } {}) { const { User } this.app.model; const offset (page - 1) * pageSize; const { rows, count } await User.findAndCountAll({ offset, limit: pageSize, order: [[id, desc]], }); return { list: rows, total: count, page, pageSize }; } async create(data) { return this.app.model.User.create(data); } async update(id, data) { return this.app.model.User.update(data, { where: { id } }); } async destroy(id) { return this.app.model.User.destroy({ where: { id } }); } } module.exports UserService;findAndCountAll是关键方法一次调用同时返回当前页数据和总条数前端分页器要的list和total正好齐活不用自己拼两次查询。controller 与路由各占一行核心app/controller/user.jsconst { Controller } require(egg); class UserController extends Controller { async index() { const { page, pageSize } this.ctx.query; const data await this.service.user.page({ page, pageSize }); this.ctx.body data; } async create() { const user await this.service.user.create(this.request.body); this.ctx.status 201; this.ctx.body user; } // show、update、destroy 同理按 this.ctx.params.id 调用 service } module.exports UserController;路由注册只需要一行app.resources(users, /api/users, controller.user);app.resources会一次性铺开标准 REST 风格的一组路由列表、详情、新建、更新、删除全都有不用手写七条。接口接上前端后最终呈现的列表页大致长这样需要关联查询时用户表之外还有文章表在模型里声明关系查询时用include带出来User.hasMany(app.model.Post, { as: posts }); User.findByPk(id, { include: [{ model: app.model.Post, as: posts }], });这样一条查询就能把用户和他的文章一起取回避免先查用户、再逐个查文章的 N1 写法。带出关联数据后的列表效果可以参考这种层级展开的形态5. 踩坑清单四个高频报错这些错我基本每次都见遇到时先对号入座启动报找不到 sequelize 相关属性—— 九成是插件没启用或config/plugin.js里package名字拼错检查第二节。connect ECONNREFUSED / Access denied—— 前者是 host、端口连不上确认 MySQL 已启动后者是账号密码不对拿命令行先登一遍再改配置。Table xxx.user doesnt exist—— 模型定义好了但表没建。开发期先sync()跑通正式环境走迁移。分页永远只有一条—— 查一下pageSize。URL 里的 query 参数都是字符串(page - 1) * pageSize这种算式遇到字符串会出怪结果记得用Number()转一下。 排查连接类问题最快的办法写一个最小脚本单独跑一次app.model.User.findAll()绕开路由和中间件能立刻分清是连接问题还是代码问题。6. 接下来做什么四件事按顺序排接口能跑只是起点。建议按这个顺序继续事务一次请求要写多张表时用app.model.transaction()包起来成功commit失败rollback防止出现用户建了、积分没加的半成品数据查询瘦身列表接口用attributes只取需要的列大字段如富文本单独在详情接口里查入参校验在 controller 入口用校验规则拦截脏数据别让空name一路漏到数据库迁移脚本引入 sequelize-cli 管理表结构变更每次改模型都留一份可回滚的迁移记录。行动清单对着勾本地建好库表启用 egg-sequelize 后应用能正常启动User 模型 五个基础接口全部返回正确数据列表接口带上page/pageSize参数返回list和total挑一个多表写入的场景用事务包一遍并手动制造失败验证回滚【免费下载链接】hotgoHotGo 是AI 赋能企业级全栈前后端分离开发及移动应用基础平台基于 Vue 和 GoFrame2.0 构建内置 AI 开发规范、适配主流 AI 开发工具人机协同高效开发。集成 jwt 鉴权、动态路由菜单、casbin 鉴权、消息队列、定时任务等功能预置各类常用场景文件助力专注业务开发。项目地址: https://gitcode.com/GitHub_Trending/ho/hotgo创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/22 12:51:16

TCP网络编程:内存池到底怎么实现的(kvstore)

一、为什么需要内存池 在 KV 存储服务里,每次处理命令都要动态分配响应缓冲区。如果频繁 malloc / free,会有两个问题: 性能开销:malloc 涉及系统调用和堆管理,频繁调用很慢。 内存碎片:大量小块分配释放…

2026/10/22 13:56:40

隔离内网MongoDB离线部署:从环境核查到安全认证的完整实践

这周刚在隔离内网里完成了一套MongoDB的离线部署,趁着手边的记录还热乎,把整个流程、踩过的坑和排查思路完整写下来。离线部署mongodb这件事表面看很简单——把安装包用U盘拷进去、解压、启动,但真正在隔离网段里动手才发现,依赖库…

2026/10/22 13:56:40

Keil HEX自动重命名:版本号+时间戳一键生成

简介:本资源是一款面向单片机开发者的Keil编译辅助工具,专为解决HEX文件缺乏版本标识与编译时间戳导致的固件管理混乱问题而设计。适用于嵌入式初学者及项目中需严格管控固件迭代的工程师,尤其在多版本并行调试、量产前固件归档等场景下价值突…

2026/10/22 13:56:40

用QwenImageEdit2512训练吉卜力风格LoRA:从环境搭建到踩坑实录

上个月有位朋友抱着一堆手绘动画截图来找我,说想把普通照片都处理成那种暖色调、大面积色块、天空像水彩晕染一样的动画风格。我给他的建议是:与其一遍遍调现成滤镜,不如直接拿QwenImageEdit2512这套开源图像编辑模型当基底,在它上…

2026/10/22 13:56:40

vLLM迁移昇腾NPU完全指南:从环境搭建到性能优化

把 vLLM 推理服务从 CUDA 环境迁移到昇腾 NPU 机器上,最开始的体验通常不会太友好。我自己的经历是:GPU 上稳定跑了几周的模型,到昇腾上第一天就段错误,第二天跑出 NaN,第三天吞吐低到让人怀疑拿到了假卡。后来一步步把…

2026/10/22 13:56:40

企业级AI Agent落地指南:从Demo到生产的四大死因与实操解法

1. 先搞清楚一个问题:你的项目其实不是在“做 Demo”,是在“躲验收”这几年我混迹在各类企业的智能体项目评审现场,有个很扎心的共识:十个 Agent 项目里,至少有七个走完 POC 就没了下文。有的团队烧了几个月算力&#…

2026/10/22 13:51:39

Redis分布式锁高并发实战:锁过期、误删与看门狗

1. 为什么"能用"的分布式锁,一到高并发就出事 先说个我在实际项目中反复看到的场景:系统刚上线时并发量不大,用 Redis 做锁,大家写 setnx 加锁、 del 解锁,跑得挺顺。等某个大促或活动流量一上来&#x…

2026/10/22 11:29:28

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑