electron+vue中使用NodeJS连接mysql连接池增删改查

之前一直比较忙,所以这篇博客一直写了一半没有写完,今天有时间就补全一下。

页面效果:

在这里插入图片描述
在这里插入图片描述

一、主要代码

npm install mysql --save

在renderer中新建db文件夹,然后在文件夹下新建mysql文件,目录和代码如下:

目录:

在这里插入图片描述
代码:

const mysql = require('mysql');

const pool = mysql.createPool({
    host: '192.168.0.222',
    port: "3308",
    user: 'root',
    password: '123456',
    database: 'ele_test'
});

//导出查询相关  
var query=function(sql,callback){  
      
    pool.getConnection(function(err,conn){
        if(err){    
            callback(err,null,null);    
        }else{    
            conn.query(sql,function(qerr,vals,fields){    
                //释放连接    
                // conn.release();    
                pool.releaseConnection(conn);
                //事件驱动回调    
                callback(qerr,vals,fields);    
            });    
        }    
    });    
};


//向外暴露方法
module.exports = {
    pool,
    query
}

然后新建一个vue文件,如下(里面有一个公共的前端分页组件,不需要的可以去掉):

<template>
  <div>
    <el-button type="primary" @click="handleAddData">添加</el-button>
    <el-table border stripe :data="tableData" style="width: 100%">
      <el-table-column prop="id" label="id"></el-table-column>
      <el-table-column prop="name" label="姓名"></el-table-column>
      <el-table-column prop="address" label="地址"></el-table-column>
      <el-table-column label="操作">
        <template slot-scope="scope">
          <el-button size="mini" @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
          <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>

    <common-pagination :tableData="tableData"></common-pagination>
    
    <el-dialog title :visible.sync="showForm" width="width">
      <div class="mb-10">
        <el-form ref="form" :model="form" label-width="80px">

          <el-col :span="24" class="flex-align-center mt-10">
            <span class="width-120 text-right">name:</span>
            <el-input v-model="form.name" placeholder></el-input>
          </el-col>

          <el-col :span="24" class="flex-align-center mt-10">
            <span class="width-120 text-right">address:</span>
            <el-input v-model="form.address" placeholder></el-input>
          </el-col>
        </el-form>
      </div>
      <div slot="footer">
        <el-button @click="showForm = false">取 消</el-button>
        <el-button type="primary" @click="handleChangeData">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { query } from "../db/MySql.js";
export default {
  name: "test",
  data() {
    return {
      tableData: [], //表格数据
      form: {
        name: "",
        id: "",
        address: "",
      }, //编辑框的值
      showForm: false, //展示添加编辑框
    };
  },
  created() {
    this.$nextTick(() => {
      this.handleLoadData();
    });
  },
  methods: {
    //获取所有数据
    handleLoadData() {
      let vm = this;
      let sql = `select * from t_test`;

      query(sql, function (err, vals, fields) {
        vm.tableData = JSON.parse(JSON.stringify(vals));
      });
    },
    //编辑一行数据
    handleEdit(index, row) {
      //id自动生成
      this.form = JSON.parse(JSON.stringify(row));
      this.showForm = true; //打开模态框
    },
    //删除一行数据
    handleDelete(index, row) {
      let vm = this;
      let sql = `delete from t_test where id = ${row.id}`;

      query(sql, function (err, vals, fields) {
        console.log(err, vals, fields);
        vm.handleLoadData();
      });
    },
    //打开添加数据模态框
    handleAddData() {
      this.showForm = true;
    },
    //添加或修改数据
    handleChangeData() {
      let vm = this;
      let sql;
      if (this.form.id) {
        sql = `update t_test set name= '${this.form.name}' ,address='${this.form.address}'  where  id=${this.form.id}`;
      } else {
        sql = `insert into t_test(name,address) values (${this.form.name},${this.form.address});`;
      }

      query(sql, function (err, vals, fields) {
        console.log(err, vals, fields);
        vm.handleLoadData();
      });
      this.showForm = false;
    },
  },
};
</script>

<style lang="scss" scoped>
</style>

参考链接(侵删)

二、踩过的坑——rowDataPacket的问题

这里有一个坑 rowDataPacket的问题 如下图:

由于参考的文章是这样解决的,如下:


于是我也这样解决:

这样下去就没有故事了,于是神奇的事情出现了,数据一直可以在控制台中出现 , 就是不能在页面上出现 如下:

控制台有 但是页面数据没有 就很绝望QAQ 加了watch监听也没有用

监听不到值的变化 一度以为是NodeJS中使用mysql的问题

后来找到了一个这样的办法。。。 也是很常见的办法,用json转一下。

就酱紫 于是数据就可以在页面出来了 虽然从控制台上看没啥变化

我发现有读者对着我的这篇文章做的时候 产生了一些疑惑 所以我在这里做一些补充 大家可以接下来继续看我的另外一篇文章 因为内容有些多 所以我分成了两篇来写 —>另外一篇

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

echo忘川

谢谢老板们

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值