保姆级教学:前端使用docker搭建mysql环境并通过node修改数据

下载mysql镜像

在docker中搜索mysql,下载mysql镜像,界面版直接点击pull即可,如果使用命令行,执行下面代码进行安装:

sh 复制代码
# sudo docker pull 镜像名:版本号
sudo docker pull mysql # 本文安装的是latest版本

启动mysql服务

在控制台输入下面命令,启动mysql容器

sh 复制代码
sudo docker run --name my_blog -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql --lower_case_table_names=1

# --name:给新创建的容器命名,此处命名为demo_mysql
# -e:配置信息,此处配置mysql的root用户的登陆密码
# -p:端口映射,此处映射主机3306端口到容器pwc-mysql的3306端口
# -d:成功启动容器后输出容器的完整ID
# mysql:mysql镜像名字
# lower_case_table_names:mysql设置大小写是否敏感的一个参数

界面可视化工具安装与使用

界面可视化工具我用的DBeaver(点击进行下载),但是安装mysql驱动时候,一直报错com.mysql.cj.jdbc.Driver,是因为Maven地址失效无法下载,我们在窗口 - 首选项,找到Maven添加仓库地址如下:

sh 复制代码
阿里:http://maven.aliyun.com/nexus/content/groups/public/
腾讯:http://mirrors.cloud.tencent.com/nexus/repository/maven-public/

我们驱动下载成功后,又遇见一个新的问题,一直报错Public Key Retrieval is not allowed,是因为当禁用 SSL/TLS 协议传输后,客户端会使用服务器的公钥进行传输,默认情况下客户端不会主动去找服务器拿公钥,进而会出现错误,我们需要在数据库 - 驱动管理器驱动属性中手动添加allowPublicKeyRetrieval属性,值为true

再次点击进行连接,即可连接成功

通过node连接mysql数据库

sh 复制代码
# 新建文件夹,并通过npm init初始化仓库配置文件
npm init -y
# 安装mysql2
npm i mysql2

这里说明一下为什么要用mysql2,而不是mysql,因为二者的密码算法不同,在查阅资料后,发现mysql连接mysql 版本8及以上会报下面的错误,因此采用了mysql2

我们首先先向数据库添加表和一条数据,如下图:

在根目录下创建src目录,并添加db.js文件,通过mysql2连接mysql数据库代码,注意databasepassword是上面启动mysql时候定义的:

js 复制代码
const mysql = require('mysql2')
//链接配置
var connection = mysql.createConnection({
    host: 'localhost', //ip
    user: 'root', //用户名
    password: '123456',//密码
    database: 'my_blog' //数据库名
});
//建立链接
connection.connect();
//进行查询user_info表中的数据
connection.query('SELECT * from user_info', function (error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results);
});

我们将启动命令在package.json中进行定义,方便后续启动数据库连接,在script里面添加下述代码:

sh 复制代码
"scripts": {
    "start": "node ./src/db.js"
},

在控制台运行npm run start,输出一个简单的数据库查询的返回,即数据库连接成功!

接口定义

在上面我们已经将数据库进行创建并能够连接了,这时候作为一个前端,需要调取接口来操作数据库,我们就需要定义接口来操作数据库了,我们先介绍一下需要用到的第三方依赖:

Express: Express是一个简洁而灵活的 Node的Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

body-parser: bodyParser中间件用来解析http请求体,是Express默认使用的中间件之一。使用express生成一个网站,它默认已经使用了bodyParser.json与bodyParser.urlencoded的解析功能,除了这两个,bodyParser还支持对text、raw的解析,综上所述,bodyParser可以理解为是用来解析json数据格式的。

cors: cors处理跨域问题

安装所需依赖,执行下面的命令

sh 复制代码
npm install express body-parser cors --save

在上面,我们已经可以获取到连接的实例connection,我们不可能每一次都重新连接,所以我们可以创建一个连接,将查询或修改的代码,单独写在一起,引入这个连接实例,我们在src下创建一个interface.js文件如下:

js 复制代码
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
const { connection } = require('./db')

const app = express();
const parser = bodyParser.urlencoded({ extended: false });
app.use(cors());

// 获取user_info表数据
app.get('/query/user-info', (req, res) => {
    const sql = 'select * from user_info'
    connection.query(sql, function (error, results) {
        if (error) throw error;
        res.send({
            status: 200,
            message: 'get 请求成功', //状态的描述
            query: req.query, // 请求参数
            data: results // 返回数据
        })
    });
})

// 更新用户名
app.post('/edit/user/userName', parser, (req, res) => {
    const { id, userName } = req.query;
    const sql = `update user_info set userName="${userName}" where id="${id}"`
    connection.query(sql, function (error, results) {
        if (error) throw error;
        res.send({
            status: 200,
            message: 'post 成功', //状态的描述
            query: req.body, // 请求参数
            data: results // 返回数据
        })
    });
})

// 启动服务器
app.listen(3000, () => {
    console.log('Server started on port 3000');
});

在上面的代码中可以看出,我们将db连接的实例,使用const { connection } = require('./db')引入,所以我们在db.js中需要将这个实例对外暴露,修改后代码如下:

js 复制代码
const mysql = require('mysql2')
//链接配置
const connection = mysql.createConnection({
    host: 'localhost', //ip
    user: 'root', //用户名
    password: '123456',//密码
    database: 'my_blog' //数据库名
});
//建立链接
connection.connect();
module.exports = { connection }

为了方便,我们将package.json中的script新增一个命令如下:

sh 复制代码
"scripts": {
    "start:db": "node ./src/db.js",
    "start:serve": "node ./src/interface.js"
},

接下来我们在控制台分别启动db服务interface接口,出现下面图中显示的,即为启动成功!

sh 复制代码
npm run start:db # 启动db服务
npm run start:serve # 启动interface接口

验证接口调用

1. 验证查询接口(get)

使用apiFox调取本地接口,查询到了数据库中数据,查询接口成功!

2. 验证修改用户名接口(post)

使用apiFox调取本地接口,修改用户名,重新查询用户信息,修改成功!

结语

我们在这篇文章中讲述了如何使用docker搭建mysql环境,并通过node从零开始创建一个简单的服务,并连接数据库,在搭建环境中间,作者也查阅了大量资料与踩坑,都在文章进行了说明,全部代码作者上传到了Gitee上面,有需要的掘友们可以下载进行尝试,不过数据库的搭建,就需要大家自己去配置了。

🥰 因为作者也是第一次尝试,所以可能设计层面并不是很理想,大家有好的建议,也可以打在评论区,大家一起探讨一下,不喜勿喷。

相关推荐
酷酷的威朗普9 分钟前
医院绩效考核系统
javascript·css·vue.js·typescript·node.js·echarts·html5
武子康1 小时前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王1 小时前
《MySQL 数据库备份与恢复》
mysql
Ljw...1 小时前
索引(MySQL)
数据库·mysql·索引
OpsEye2 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级
Ljw...2 小时前
表的增删改查(MySQL)
数据库·后端·mysql·表的增删查改
i道i9 小时前
MySQL win安装 和 pymysql使用示例
数据库·mysql
Oak Zhang11 小时前
sharding-jdbc自定义分片算法,表对应关系存储在mysql中,缓存到redis或者本地
redis·mysql·缓存
久醉不在酒12 小时前
MySQL数据库运维及集群搭建
运维·数据库·mysql
WindFutrue12 小时前
使用Mybatis向Mysql中的插入Point类型的数据全方位解析
数据库·mysql·mybatis