【koa】05-koa+mysql实现数据库集成:连接和增删改查
- 电脑硬件
- 2025-09-01 12:27:02

前言
前面我们已经介绍了第二阶段的第1-4点内容,本篇介绍第5点内容:数据库集成(koa+mysql)
也是第二阶段内容的完结。
一、学习目标在koa项目中正常连接数据库,对数据表进行增删改查的操作。
二、操作步骤本篇文章会使用到:koa+sequelize+mysql+apipost(用于测试http方法)
注意:文章很多的操作步骤和“express框架的数据库集成”基本上是一样的,参考文章:
【express-generator】09-连接和使用数据库-CRUD 操作(第二阶段完结)-CSDN博客
所以文章中会简单跳过/省略一些简单的步骤。
1、安排依赖在项目根目录下运行以下命令安装必要的依赖:
npm install koa mysql2 sequelize koa-router koa-bodyparser 2、配置数据库连接注意:每个人的数据库连接连接信息不一样,对应修改自己的信息。
在state2/models/dbConnect.js中配置数据库连接信息:
// 该文件负责连接数据库 const { Sequelize } = require("sequelize"); // 创建数据库连接 const sequelize = new Sequelize("mysite2", "root", "123456aa", { host: "localhost", dialect: 'mysql', logging: false }); const startDB=async()=> { try { await sequelize.authenticate(); console.log('数据库已建立起连接.'); } catch (error) { console.error('Unable to connect to the database:', error); } } startDB() // 向外暴露这个连接实例 module.exports = sequelize; 3、定义数据模型在state2/models/userModel写入以下代码:
const { DataTypes } = require("sequelize"); const sequelize = require("./dbConnect"); // 定义数据模型 module.exports = sequelize.define("koauser", { // 这张表拥有哪些字段 name : { type : DataTypes.STRING, allowNull : true }, age : { type : DataTypes.INTEGER, allowNull : true }, },{ //与模型定义时的名称一致。 // 比如定义了上述定义了content模型,设置了这个字段,创建表的名字也是content。 freezeTableName : true, //用于记录数据的创建时间和更新时间。 createdAt : false, updatedAt : false });这里我们定义了一个名为“koauser”的数据表,有name和age字段,分别是string和integer数据类型。
4、初始化Sequelize和加载模型在state2/demodels/db.js写入以下代码:
// 该文件负责对数据库进行一个初始化操作 const sequelize = require("./dbConnect"); // 数据库连接实例 const userModel = require("./userModel"); // 数据模型 const initData=async function () { // 将数据模型和表进行同步 await sequelize.sync({ alter: true, }) // 同步完成之后,有一些表是需要一些初始化数据 // 查询这张表有没有内容,没有内容才初始化数据 const userCount = await userModel.count(); if (!userCount) { // 进入此 if,说明该表没有数据,我们进行一个初始化 await userModel.create({ name: "Tom", age:18 }) console.log("初始化内容数据表数据完毕..."); } console.log("数据库数据已经准备完毕...."); } initData() 5、创建Koa应用并集成Sequelize在state2/demo5.js中写入以下代码:
const Koa = require('koa'); const Router = require('koa-router'); const bodyParser = require('koa-bodyparser'); // const models = require('./models'); const userModel = require('./models/userModel'); const app = new Koa(); const router = new Router(); require('./models/db'); // 使用bodyParser中间件解析请求体 app.use(bodyParser()); // 定义路由 router.get('/', async (ctx) => { ctx.body = 'Welcome to Koa with Sequelize!'; }); // 使用路由中间件 app.use(router.routes()).use(router.allowedMethods()); app.listen(3000, () => { console.log('Server is running at http://localhost:3000'); });启动服务,看是否正常连接数据库和创建、初始化数据表。
在state2的目录下打开终端,执行node demo5.js
启动之前,数据库的表情况
启动之后,多了一个koauser的数据表,并且有一条数据。
6、增删改查(CRUD)操作Create:增加
Read:查
Update:更新
Delete:删除
6.1、查找所有用户信息在state2/demo5.js中新增代码:
// 查找所有用户 router.get('/users', async (ctx) => { const users = await userModel.findAll(); ctx.body = users; });方法放在这个位置
测试:启动服务+apipost工具
新增get方法,点击发送则会得到以下结果
6.2、 增加新的用户 // 创建用户 router.post('/user', async (ctx) => { const { name, age } = ctx.request.body; try { const user = await userModel.create({ name,age }); ctx.body = user; } catch (error) { ctx.status = 400; ctx.body = { error: error.message }; } });测试:启动服务+添加post方法
在数据表中刷新可以看到新增的数据项
6.3、查找单条用户数据为了后续测试,先增加了几条数据
// 查找单个用户 router.get('/user/:id', async (ctx) => { const { id } = ctx.params; try { const user = await userModel.findByPk(id); if (user) { ctx.body = user; } else { ctx.status = 404; ctx.body = { error: 'User not found' }; } } catch (error) { ctx.status = 400; ctx.body = { error: error.message }; } });
测试:启动服务+添加get方法
查找id为1的数据项
查找id为3的数据项
6.4、更新用户信息 // 更新用户 router.put('/user/:id', async (ctx) => { const { id } = ctx.params; const { name,age } = ctx.request.body; try { const user = await userModel.findByPk(id); if (user) { await user.update({ name,age }); ctx.body = user; } else { ctx.status = 404; ctx.body = { error: 'User not found' }; } } catch (error) { ctx.status = 400; ctx.body = { error: error.message }; } });测试:启动服务+测试put方法
我们尝试将id为1的数据项,对name进行修改成"Rura"(原本是Tom)
响应结果
刷新数据表,可以看见id为1的数据项的name已经被修改。
6.5、删除用户信息 // 删除用户 router.delete('/user/:id', async (ctx) => { const { id } = ctx.params; try { const user = await userModel.findByPk(id); if (user) { await user.destroy(); ctx.status = 204; } else { ctx.status = 404; ctx.body = { error: 'User not found' }; } } catch (error) { ctx.status = 500; ctx.body = { error: error.message }; } });测试:启动服务+测试delete方法
这里我们尝试将id为4的数据项进行删除
点击发送,在数据表中刷新查看结果。
三、小结这篇我们介绍了在koa中如何使用数据库,创建和初始化数据表,并介绍了数据表的常用操作:增删改查,文章以“代码示范+测试”的内容呈现。文章中用到的代码示范,我已经同步更新在代码仓库中,有需要的朋友请自行获取:koa练习: koa练习
欢迎大家star和fork,也欢迎一起完善这个代码仓~
koa专栏的第二阶段的内容到此结束,后续的文章我会更新第三阶段的内容。
关注我,及时获取最新文章消息~
【koa】05-koa+mysql实现数据库集成:连接和增删改查由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【koa】05-koa+mysql实现数据库集成:连接和增删改查”