likes
comments
collection
share

koa连接mysql操作数据库实现增删改查

作者站长头像
站长
· 阅读数 29

这篇文章介绍一下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)
        }
      });
  });
  

启动项目后,搜索数据库后获取的数据可以在控制台看到

koa连接mysql操作数据库实现增删改查

封装链接数据库

在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' };
    }
  })

koa连接mysql操作数据库实现增删改查

新增数据

接收到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' };
  }
  })

koa连接mysql操作数据库实现增删改查

新增多条数据

一次性插入多条记录时,需要将这些记录合并为一个 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' };
  }
  })

koa连接mysql操作数据库实现增删改查

再次调用get方法时可以看到数据已经添加上了

koa连接mysql操作数据库实现增删改查

修改数据


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' };
  }
})

koa连接mysql操作数据库实现增删改查

删除数据

删除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',
  }
})

这是执行结果: koa连接mysql操作数据库实现增删改查

查询数据,可以看到就剩一条了

koa连接mysql操作数据库实现增删改查

这算是最简单的增删改查了,如果需要demo的完整代码,可自行获取☞ github仓库:koa链接mysql操作数据库

转载自:https://juejin.cn/post/7366441097584197672
评论
请登录