koa连接mysql操作数据库实现增删改查
这篇文章介绍一下koa如何连接MySQL数据库并且实现最基本的增删改查
安装mysql和DBeaver可视化工具
MySQL工具和DBeaver可视化工具的安装教程可看我另外两篇的详细教程
我下载最新的MySQL8.4的版本,在koa项目中连接时出现了一点问题,使用8.0.37版本可以正常连接使用
所以为了避免因为新版本导致出现不必要的问题,我把能够正常使用的安装包放到网盘里,可以自行获取:MySQL和DBeaver工具安装包
安装好后,可以新建一个koa_test
数据库,并添加一条数据
koa中连接mysql
需要先在项目中安装mysql
npm install mysql
引入mysql,并且配置数据库的基本属性
host
: 指定 MySQL 数据库的主机名,这里设置为localhost
表示数据库在本地运行。database
: 指定连接的默认数据库,这里设置为koa_test
表示连接到名为koa_test
的数据库。user
: 指定连接数据库所使用的用户名,这里设置为root
表示使用 root 用户进行连接。port
: 指定 MySQL 服务器监听的端口号,这里设置为3306
表示 MySQL 默认的端口号。password
: 指定连接数据库所使用的密码,这里设置为123456
对应于 root 用户的密码。
为了验证是否能够调通,直接在入口文件进行连接调用mysql
const mysql = require("mysql")
const connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "123456",
database: "koa_test",
port:3306
})
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database as ID Success!' + connection.threadId);
connection.query('SELECT * FROM list', (err, results) => {
if(err)console.log(err)
if(results){
console.log("搜索结果:",results)
}
});
});
启动项目后,搜索数据库后获取的数据可以在控制台看到
封装链接数据库
在db/index.js中封装一个链接mysql的工具
const mysql = require('mysql')
const connection = mysql.createConnection({
host: "localhost",
user: "root",
password: "123456",
database: "koa_test",
port: 3306
})
connection.connect((err) => {
if (err) {
console.error('Error connecting to MySQL database: ' + err.stack);
return;
}
console.log('Connected to MySQL database as ID Success!', connection.threadId);
});
module.exports = connection
在需要使用的地方可以直接引入这个方法,然后 进行connection.query
等操作
之前写过koa的小demo 这次也在之前的基础上修改,在http://localhost:3456/list
路由下进行增删改查的演示
查询数据
引入mysql连接
const connection = require('../db/index')
查询数据库通常是异步操作所以要把查询操作放到Promise里
router.get("/",async (ctx,next)=>{
try{
const results = await new Promise((resolve, reject) => {
connection.query('SELECT * FROM list', (err, results) => {
if (err) reject(err);
else resolve(results);
});
});
ctx.body = results;
}catch (err) {
ctx.body = { error: 'Internal Server Error666' };
}
})
新增数据
接收到post请求时 就会执行
router.post("/",async(ctx,next)=>{
const newData = ctx.request.body;
const sql = `INSERT INTO list (title) VALUES (?)`;
try{
const results = await new Promise((resolve, reject) => {
connection.query(sql,[newData.title], (err, results) => {
if (err) reject(err);
else resolve(results);
});
});
ctx.body={
ok:1,
info:'添加成功',
}
}catch (err) {
console.log("🚀 ~ router.post ~ err:", err)
ctx.body = { error: 'Internal Server Error666' };
}
})
新增多条数据
一次性插入多条记录时,需要将这些记录合并为一个 INSERT INTO 语句
INSERT INTO list (title) VALUES ('js事件循环'), ('vue生命周期'), ('jwt鉴权');
这样一次性插入了三条记录,每个记录用括号括起来,并用逗号分隔
router.post("/",async(ctx,next)=>{
const newData = ['js事件循环','vue生命周期','jwt鉴权'];
let sql = `INSERT INTO list (title) VALUES`;
const values = newData.map(data => {
return `(${connection.escape(data)})`;
});
sql += values.join(", ");
try{
const results = await new Promise((resolve, reject) => {
connection.query(sql, (err, results) => {
if (err) reject(err);
else resolve(results);
});
});
ctx.body={
ok:1,
info:newData,
}
}catch (err) {
console.log("🚀 ~ router.post ~ err:", err)
ctx.body = { error: 'Internal Server Error666' };
}
})
再次调用get方法时可以看到数据已经添加上了
修改数据
router.put("/:id", async (ctx, next) => {
let sql = "UPDATE list SET title=? WHERE id = ?"
let sqlParams = '这是新的问题'
console.log("🚀 ~ router.put ~ ctx.body:", ctx.params.id)
try {
const results = await new Promise((resolve, reject) => {
connection.query(sql, [sqlParams,ctx.params.id],(err, results) => {
if (err) reject(err);
else resolve(results);
});
});
ctx.body = {
ok: 1,
info: 'update success',
}
} catch (err) {
console.log("🚀 ~ router.post ~ err:", err)
ctx.body = { error: 'Internal Server Error666' };
}
})
删除数据
删除id> 1 的数据
router.del("/:id", async (ctx, next) => {
let sql = `DELETE FROM list WHERE id > ${ctx.params.id}`
connection.query(sql, (err, results) => {
if (err) {
console.error("错误", err)
} else {
console.log("删除结果:", results)
}
});
ctx.body = {
ok: 1,
info: 'del success',
}
})
这是执行结果:
查询数据,可以看到就剩一条了
这算是最简单的增删改查了,如果需要demo的完整代码,可自行获取☞ github仓库:koa链接mysql操作数据库
转载自:https://juejin.cn/post/7366441097584197672