vue mysql 直连

news2024/10/28 16:48:20

        最近又搞了个小项目,单机版本的内部考勤管理系统,直接部署在对方的工作电脑上,不需要在云端部署,因为项目本身就小,我就没配置后端同事进行开发,而是通过VUE直连mysql进行业务开发及保存。后期再通过PM2来守护页面及服务,随时打开使用。

        下面来复盘一下整体开发过程。

一、mysql及navicat的安装

1、mysql的安装。

前往官方网站下载安装,点击连接->mysql下载及安装官网

 需求说明的是,这里下载使用5.7.44的版本,8.0及9.0连接机制有所调整,会增加额外的一些配置。这里就不再讨论展开。

下载后的步骤一路默认进行即可。安装完成后配置环境变量即可。安装过程中需要输入root的密码,设置时记录好后面连接服务要用。

 2、navicat的安装

网上自行找哈,这里也不展开,后期用于设计表。

 二、创建Vue项目

CD到指定的目录后运行以下命令,按时提示完成项目的创建。

vue create 项目名

三、安装相关依赖

在项目目录中依次执行如下命令

下载express:npm install express -save

下载cors:npm install cors -save

下载mysql:npm install mysql -save

下载axios:npm install axios -save

下载elementUI:npm install element-ui -save

下载sass:npm install sass -save

等,所有依赖如下,自行查看并安装即可

四、在项目中创建server文件夹,用于搭建本地服务器。

4.1、在server文件下创建app.js文件,粘贴以下内容。此为api连接服务。

let express  = require('express')
let cors = require('cors')
let bodyParser = require('body-parser')
let router = require('./router')
let app = express()

app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended:false}))
app.use(cors())
app.use(router)

app.listen(80,()=>{
    console.log('服务器启动成功');
})

4.2、在server文件下创建db文件夹,并在db文件夹下创建index.js文件,粘贴以下内容。此为mysql连接服务。注意数据库名及密码,密码即1.1步设置的ROOT密码,我创建的库名叫oadb,你创建的叫什么就写什么。不要写为user哦,user是表名不是库名,一个库里面有多个表,注意关系区分。

let mysql = require('mysql')

let db = mysql.createConnection({
    host:'127.0.0.1',
    user:'root',
    password:'abel',
    database:'oadb'
})

module.exports = db

4.3、在server文件夹下创建api文件夹,并在api文件夹下创建user.js,用于操作数据库。注意此为示例,这里也仅供部分功能,其他业务逻辑功能暂不示例。all方法在API路由表中定义的是get方式,所以取参是req.query.xxx,而del和update方法是POST方法,取参是req.body.xxx,自己注意区分。

let db = require("../db/index");

exports.all = (req, res) => {
    var sql =
        "select * from t_user";
    db.query(sql, [], (err, data) => {
        if (err) {
            console.log("出错了", err);
            return res.send("错误" + err.message);
        }
        res.send(data);
    });
};

//删除人员
exports.del = (req, res) => {
    var sql = "delete from t_user where id = ?";
    db.query(sql, [req.body.id], (err, data) => {
        if (err) {
            console.log("出错了", err);
            return res.send("错误" + err);
        }
        res.send(data);
    });
};

//更新
exports.update = (req, res) => {
    var sql =
        "update t_user set name = ?,mobile=?,idNo=?,sex=?,noteText=?,groupId=? where id = ?";
    db.query(
        sql,
        [
            req.body.name,
            req.body.mobile,
            req.body.idNo,
            req.body.sex,
            req.body.noteText,
            req.body.groupId,
            req.body.id,
        ],
        (err, data) => {
            if (err) {
                console.log("出错了", err);
                return res.send("错误" + err);
            }
            res.send(data);
        }
    );
};

 4.4、在server文件夹下创建router.js,用于配置对应api路由,这个文件管理着所有接口及请求方式,将api与相应的表操作类进行关联。代码如下 :

let express = require('express')
let router = express.Router()

let user = require('./api/user')

//用户相关,get方法
router.get('/user/all',user.all)
//post方法
router.post('/user/del',user.del)
router.post('/user/update',user.update)


module.exports = router

以上完成后项目目录看起来应该是这样的:

五、设计用户表

5.1、使用navicat设计user表,字段简要定义如下:

id,

name,

mobile,

idNo,

sex,

5.2、手动插入一条数据。这步的目的是为了验证连接是否成功。

CD到server目录下,运行以下命令来启动服务:

node app.js

5.3、验证api连接服务是否正常

浏览器打开http://127.0.0.1/user,因为我的表包含以下字段,显示如下:

六、业务页面的开发 

6.1、注册elementUI组件。在mian.js粘贴以下完整代码:

import Vue from 'vue'
import App from './App.vue'

import Element from 'element-ui'
import './assets/styles/element-variables.scss'
import vuePrototype from '@/utils/vuePrototype'

Vue.use(Element)
Vue.use(vuePrototype)

Vue.config.productionTip = false

new Vue({
  render: h => h(App),
}).$mount('#app')

6、2修改VUE脚本手架生成的页面,一般叫叫hellowordcomponet,把里面的代码清空,粘贴以下代码:

<template>
  <div>
    <button @click="get()">获取user表数据</button>
  </div>
</template>

<script>
import axios from "axios"
export default {
  data () {
    return {
    };
  },

  methods: {
    get() {
      axios.get('http://127.0.0.1/user').then(res=>{
          console.log(res.data);
      }).catch(err=>{
          console.log("获取数据失败" + err);
      })
    }
  }
}
</script>

不出意外的话,控制台打印数据如下:

 到此,所有关键点均打通,后期就看你业务逻辑,无非就是增加页面、增加api、增加表、增加加密等。

因为我项目中涉及三个模块业务,所以我的api定义如下,对应三张表,有多少表,就对应多少个api文件,相互隔离,便于维护及保持项目结构的清晰。

 我的业务页面:

当然你如果不会mysql查询就需要查阅资料或者是找后端人员协助你写查询语句。

在此再次强调接口服务的参数写法,参考4.4,认真读每一行的说明。

all方法在API路由表中定义的是get方式,所以取参是req.query.xxx,del和update方法是POST方法,取参是req.body.xxx,自己注意区分。

整体开发完成后,单机部署请移步以下教程学习查看->戳我学习单机部署

创作不易,请留下你的点赞或收藏哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2225545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

灵动AI:艺术与科技的融合

灵动AI视频官网地址&#xff1a;https://aigc.genceai.com/ 灵动AI 科技与艺术的完美融合之作。它代表着当下最前沿的影像技术&#xff0c;为我们带来前所未有的视觉盛宴。 AI 视频以强大的人工智能算法为基石&#xff0c;能够自动分析和理解各种场景与主题。无论是壮丽的自然…

快速搭建SpringBoot3+Prometheus+Grafana

快速搭建SpringBoot3PrometheusGrafana 一、搭建SpringBoot项目 1.1 创建SpringBoot项目 1.2 修改pom文件配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://…

MySQL之数据库设计

前文我们了解了数据库中库、表等的操作&#xff0c;今天我们来学习如何设计数据库&#xff1f;&#xff1f; 在设计数据库前&#xff0c;我们先来了解什么是范式&#xff1f;&#xff1f; 1. 范式 数据库的范式是一组规则&#xff0c;在设计关系数据库时&#xff0c;遵从不同…

Elasticsearch 解析:倒排索引机制/字段类型/语法/常见问题

Elasticsearch 是一个分布式的开源搜索引擎&#xff0c;广泛用于全文搜索、分析和数据存储。它基于 Apache Lucene 构建&#xff0c;支持 RESTful 风格的 API&#xff0c;使得开发者能够高效地存储和检索数据。本文将详细讲解 Elasticsearch 的基本原理&#xff0c;特别是其倒排…

ctfshow(66->70)--RCE/命令执行漏洞--禁用命令执行函数

Web66 源代码&#xff1a; if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); }代码审计&#xff1a; POST传参c&#xff0c;eval进行代码执行。 思路&#xff1a; 由于题目过滤了命令执行函数&#xff0c;所以使用其他方法进行RCE。 先使用c…

一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)

1. 背景介绍 如果你拿到了两台8卡A100的机器&#xff08;做梦&#xff09;&#xff0c;你的导师让你学习部署并且训练不同尺寸的大模型&#xff0c;并且写一个说明文档。你意识到&#xff0c;你最需要学习的就是关于分布式训练的知识&#xff0c;因为你可是第一次接触这么多卡…

【ROS概述】概念及环境搭建

学习途径&#xff1a; 教程&#xff1a;Introduction Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程 课程视频&#xff1a;https://www.bilibili.com/video/BV1Ci4y1L7ZZ 机器人体系 要完全实现一个机器人的系统研发&#xff0c;几乎是“全栈”开发&#xff0c;…

python 爬虫 入门 五、抓取图片、视频

目录 一、图片、音频 二、下载视频&#xff1a; 一、图片、音频 抓取图片的手法在上一篇python 爬虫 入门 四、线程&#xff0c;进程&#xff0c;协程-CSDN博客里面其实有&#xff0c;就是文章中的图片部分&#xff0c;在那一篇文章&#xff0c;初始代码的28&#xff0c;29行…

Python 函数返回值之None类型

什么是None None是类型‘NoneType’字面量&#xff0c;用于表示&#xff1a;空的、无意义的 函数如何返回None 不使用return语句即返回None 主动return None 使用场景 函数返回值if判断变量定义 练习&#xff1a; 练习一&#xff1a;无return语句的函数返回值 # 无ret…

Docker | centos7上对docker进行安装和配置

安装docker docker配置条件安装地址安装步骤2. 卸载旧版本3. yum 安装gcc相关4. 安装需要的软件包5. 设置stable镜像仓库6. 更新yum软件包索引7. 安装docker引擎8. 启动测试9. 测试补充&#xff1a;设置国内docker仓库镜像 10. 卸载 centos7安装docker https://docs.docker.com…

交易逆序对的总数 ---- 分治-归并

题目链接 题目: 分析: 解法一: 暴力解法, 遍历所有的数对, 找到逆序对, 需要两重for循环, 一定会超时解法二: 归并排序的思想如果我们将数组分成两半, 我们在每一半中各找一个数字, 判断是否为逆序对, 再根据归并的思想, 再将一半数组分半, 判断是否为逆序对, 直到数组只有一…

合约门合同全生命周期管理系统:企业智能合同管理的新时代

合约门合同全生命周期管理系统&#xff1a;企业智能合同管理的新时代 1. 引言 随着现代企业的快速发展&#xff0c;合同管理的复杂性日益增加。无论是采购合同、销售合同还是合作协议&#xff0c;合同管理已成为企业运营中至关重要的一环。传统的手工合同管理方式往往效率低下…

WISE:重新思考大语言模型的终身模型编辑与知识记忆机制

论文地址&#xff1a;https://arxiv.org/abs/2405.14768https://arxiv.org/abs/2405.14768 1. 概述 随着世界知识的不断变化&#xff0c;大语言模型&#xff08;LLMs&#xff09;需要及时更新&#xff0c;纠正其生成的虚假信息或错误响应。这种持续的知识更新被称为终身模型编…

Colorful/七彩虹将星X17 Pro Max 2023款 Win11原厂OEM系统 带COLORFUL一键还原

安装完毕自带原厂驱动和预装软件以及一键恢复功能&#xff0c;自动重建COLORFUL RECOVERY功能&#xff0c;恢复到新机开箱状态。 【格式】&#xff1a;iso 【系统类型】&#xff1a;Windows11 原厂系统下载网址&#xff1a;http://www.bioxt.cn 注意&#xff1a;安装系统会…

网页上的视频怎么下载下来?三种方法

分享三个简单好用的网页视频下载工具&#xff0c;值得使用&#xff01; 1.IDM IDM 是一款可以提高下载速度达5倍的工具&#xff0c;同时具有恢复、调度和组织下载的功能。如果由于网络问题或意外的电源中断&#xff0c;程序将恢复未完成的下载。 IDM 还具有一个完全功能的站点…

Redis 过期策略 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 过期策略 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 过期策略 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis &a…

【SpringBoot】✈️@Service 代替 @Controller 在控制层场景使用

目录 &#x1f378;前言 &#x1f44b;一、区别 &#x1f37b;二、本地测试 2.1 响应类 2.2 控制层 3.Service 测试 &#x1f37a;三、分析 &#x1f440;四、章末 &#x1f378;前言 小伙伴们大家好&#xff0c;由于最近比较忙&#xff0c;文章更新的稍微怠慢了&#xff0…

leetcode-62-不同路径

题解&#xff1a; 1、dp[i][j]代表到达(i,j)点最多的路径&#xff1b;题目要求机器人每次只能向右或向下走一步&#xff0c;所以到达(i,j)点的最多路径为到达(i-1,j)的最多路径与到达(i,j-1)的最多路径之和。即dp[i][j]dp[i-1][j]dp[i][j-1]。 2、当(i,j)位于矩阵的第一行或第…

rabbitmq高级特性(1):消息确认,持久性,发送方确认和重试机制

目录 1.消息确认机制 1.1.消息确认机制介绍 2.1.Spring-AMQP的三种消息确认&#xff08;重点&#xff09; 2.持久性 2.1.交换机持久性 2.2.队列持久性 2.3.消息持久性 3.发送方确认 3.1.confirm确认模式 3.2.return退回模式 4.重试机制 4.1.重试机制定义 4.2.重试…

Padavan开启IPV6

开户IPV6 如果运营商支持IPV6&#xff0c;在网络地图中可以看到获取到的ipv6地址 开启SSH 输入如下命令让访火墙放行IPV6 ip6tables -F ip6tables -X ip6tables -P INPUT ACCEPT ip6tables -P OUTPUT ACCEPT ip6tables -P FRWARD ACCEPT 可以写在自启动脚本里 关闭路由器的防…