从Express开始学习node.js(五)接入数据库
从Express开始学习node.js(五)接入数据库
引言
在本专栏的上一篇文章从Express开始学习node.js(四)模板引擎中,我们了解了什么是模板引擎、常用的模板引擎有哪些、以及如何使用模板引擎。最后,笔者聊了些自己对于模板引擎,以及前后端分离的想法
接下来,我们将要学习接入数据库
这一重要概念,继续充实我们的技术积累。
本篇文章作为node.js系列的第三章节,主要内容有:
-
什么是数据库
-
常用的数据库
-
搭建MySQL数据库环境
-
在MySQL数据库中建一个简单的表
-
在Express中接入MySQL数据库
注:本章节所有的内容,都需要node.js环境,请确保自己已安装node环境
一、数据库简介
数据库是一个按数据结构
来存储和管理数据
的计算机软件系统
,主要提供CURD
功能,即对于数据进行增删改查。
软件使用的过程,数据库至关重要。万物皆可为数据,我们的用户信息、购物数据、访问数据等,都是通过管理数据库来实现长期存储的,我们修改密码、添加订单、收藏文章等操作,本质都是在操作数据库。
本章节大部分篇幅是用于介绍MySQL数据库的安装与使用的,如果小伙伴已经了解过MySQL数据库,那么可以跳到
五、在Express中接入MySQL数据库
查看。
二、常用的数据库
数据库可以分为关系型数据库和非关系型数据库两种类型。关系型数据库是指采用了关系模型来组织数据的数据库,如 MySQL、Oracle 等。非关系型数据库则是指不采用关系模型来组织数据的数据库,如 MongoDB、Redis 等。
不同数据库具有不同的特征,但是基本的思想是相通的,具体使用哪一种数据库,需要根据部门规划及业务场景来做决定。
笔者所在公司使用的是MySQL数据库,所以在本文中将主要介绍MySQL数据库
的使用,以及在Express中的接入。
三、搭建MySQL数据库环境
不同操作系统下,MySQL数据库环境的搭建方式不同。小伙伴们请根据自己使用的操作系统来搭建.
由于笔者使用的是Windows
操作系统,所以这里以Windows
为例,来搭建一个本地的MySQL数据库环境。
1、下载安装MySQL
进入到MySQL官网下载地址,选择下图中的版本,点击Download进入到下载页面:
在下载页面,点击下图中的 No thanks, just start my download. 就可立即下载:
2、解压到指定目录
下载完成后,将MySQL解压到指定目录。该目录将存放MySQL的数据,请选择一个合理的位置。
笔者将MySQL解压到了F:\MySQL\mysql-8.0.33-winx64
目录下。
3、编写MySQL配置文件
首先,我们进入到指定目录中:
cd F:\MySQL\mysql-8.0.33-winx64\mysql-8.0.33-winx64
这里我们需要根据实际情况,找到与
bin
目录同级的位置
然后,我们在该目录下创建my.ini
配置文件,编辑my.ini
配置以下基本信息:
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=F:\MySQL\mysql-8.0.33-winx64\mysql-8.0.33-winx64
# 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错
# datadir=C:\\web\\sqldata
# 允许最大连接数
max_connections=20
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
4、启动MySQL数据库
以管理员身份打开 cmd 命令行工具:
切换目录到\bin
:
F:
cd F:\MySQL\mysql-8.0.33-winx64\mysql-8.0.33-winx64\bin
初始化数据库:
mysqld --initialize --console
执行完成后,会输出 root 用户的初始默认密码:
2023-06-07T07:14:31.474876Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost:
=lmrJhxdw9je
我们需要把这个密码先记录下来,记得一定要记录。
然后我们安装一下mysqld,:
mysqld install
就可以启动数据库了:
net start mysql
看到以下日志输出,就证明数据库已经启动成功了:
这里有2个需要注意的地方,笔者在这一步踩过坑:
-
当我们执行mysqld命令时,会提示
'mysql'不是内部或外部命令,也不是可运行的程序或其处理文件。
这个问题是因为没有配置环境变量,配置环境变量之后就可以正常使用mysql命令了。 -
Windows下的脚本命令与Linux下不同,如果不是系统盘(一般为C盘),则需要手动切换到指定盘,即我们在命令行中输入的
F:
5、登录MySQL数据库
当 MySQL 服务已经运行时, 我们就可以通过 MySQL 自带的客户端工具登录到 MySQL 数据库中了。
1. 初次登录
MySQL的登录命令为:
mysql -h 主机名 -u 用户名 -p
-h
: 指定客户端所要登录的 MySQL 主机名, 登录本机(localhost 或 127.0.0.1)该参数可以省略;-u
: 登录的用户名;-p
: 告诉服务器将会使用一个密码来登录, 如果所要登录的用户名密码为空, 可以忽略此选项。
我们是登录本机(即:localhost)、用户为root、密码是初始化时记录下的=lmrJhxdw9je
,所以我们用如下命令来登录前面启动的数据库:
mysql -u root -p=lmrJhxdw9je
当看到控制台打印Welcome to the MySQL monitor.
时,则表示登陆成功:
我们现在可以在mysql>
命令行中操作我们的MySQL数据库了。
注意:
-p后面不能有空格,要直接跟密码!
2. 修改密码
我们在启动MySQL数据库时,初始化生成的密码不便于记忆。所以我们在初次登录后,首先将root的密码做一个修改,这里因为我们用的是MySQL 8.x版本,所以我们用下述命令来修改密码:
alter user'root'@'localhost' identified by 'root1234';
成功后会打印:Query OK, 0 rows affected (0.07 sec)
:
注意:不同版本之间修改密码的命令是不同的!如果出现错误,请查找对应版本的修改命令。
在修改密码之后,我们要刷新MySQL的系统权限相关表:
flush privileges;
同样,成功后会打印:Query OK, 0 rows affected (0.07 sec)
:
然后我们退出:
quit;
用新密码root1234
登录进来:
mysql -u root -proot1234
6、安装MySQL client(可选)
我们想要管理我们的数据库,离不开使用client,常用的MySQL client有:
-
MySQL Client
-
Navicat
-
MySQL Workbench
MySQL Client是MySQL官方提供的命令行工具
,可以在终端中直接操作 MySQL 数据库,安装MySQL Server时会同时安装MySQL Client。
Navicat不仅支持MySQL,还支持Oracle、SQL Server 等多种数据库,其用户界面简洁明了、易于使用,笔者身边的后端朋友大都使用Navicat,是最受欢迎、使用体验最好的client。唯一的缺点是要付费
,或者需要破解才能使用。
MySQL Workbench是MySQL官方提供的数据库管理工具,用户界面比Navicat要复杂一些,但功能完善,胜在免费
。
这三种client都能够满足我们的基础使用,大家根据自己的需要选择即可。
基于简单学习使用的目的,在本文中我们选择使用MySQL Client命令行工具
。
四、使用MySQL
到这一步,我们已经完成了MySQL数据库的环境搭建,接下来我们就来学习一下如何使用MySQL数据库。
本文中不会对操作数据库的每一步进行介绍,如果对于数据库不太了解的小伙伴,可以参考廖雪峰的SQL教程或者菜鸟教程的MySQL教程学习。
1、创建数据库
我们可以来查看初始化创建时,MySQL中有哪些数据库:
show databases;
上述的4个库:information_schema
、mysql
、performance_schema
和sys
是系统库,不要去改动它们。
我们来创建一个自己的数据库the_outcast
:
CREATE DATABASE the_outcast;
我们再来查看一下数据库列表,发现我们刚才创建的数据库the_outcast
已经存在了:
对一个数据库进行操作时,要首先将其切换为当前数据库,我们切换到the_outcast
数据库:
use the_outcast
2、建表
我们已经创建了一个the_outcast
数据库,由于我们还没有建表,所以得到了Empty set
的结果:
show tables;
创建MySQL数据表的SQL通用语法是:
CREATE TABLE table_name (column_name column_type);
我们来创建一个users
表,用来存储用户的信息,这个表中的每一行应该包括3列:
- 用户id
- 用户名
- 密码
3、插入数据
我们已经创建了一张users
表,由于我们还没有插入数据,所以得到了:
select * from user;
向MySQL数据表插入数据通用的SQL语法为:
INSERT INTO table_name ( field1, field2,...fieldN ) VALUES ( value1, value2,...valueN );
我们先用命令行来创建一个管理员admin
:
insert into user (user_name, user_password) values ('admin','admin1234');
我们再来查看一下users
表中的数据:
五、在Express中接入MySQL数据库
通过前面的学习,我们已经获得了一个MySQL数据库环境,并且有了基本的结构:the_outcast数据库
-> user表
-> admin用户
。现在,我们可以将视线从MySQL中离开了,剩下的部分将在Express中完成。
出于简单学习、了解在Express中如何接入MySQL数据库即可
的目的,我们仅在Express中完成一个功能:获取所有用户。
-
安装mysql依赖
npm install mysql
-
在根目录下创建一个
db
文件夹mkdir db
-
在
/db
目录下创建一个index.js
文件,来编辑操作mysql的配置文件
// db/indes.js
const mysql = require('mysql')
// 注意:这里要根据自己数据库中的配置来填写!
const connection = mysql.createConnection({
host: 'localhost',
port: 3306,
user: 'root',
password: 'root1234',
database: 'the_outcast'
})
connection.connect()
module.exports = connection;
- 在
/index.js
中,引入/db/index.js
中导出的connection
:
// index.js
...
const db = require("./db/index");
...
- 我们新增对于
/users
目录的GET请求
,让服务器查询the_outcast
数据库中user
表的所有成员,并返回给客户端:
// index.js
app.get('/users', (req, res) => {
db.query('select * from user', (err, users) => {
if (err) throw err
res.json(users);
})
})
我们用postman请求一下,可以发现我们已经拿到了之前创建的admin
用户的信息:
六、关闭数据库
当我们确认数据库暂时不会使用,或者我们需要停机维护时,记得关闭数据库,否则数据库会一直在后台运行:
net stop mysql
需要注意的是,当数据库关闭时,我们在Express中的服务也会受到影响,所以
关闭数据库需慎重!
总结
在这一节,我们学习了如何搭建一个MySQL环境、如何使用MySQL来建库建表、如何在Express中接入MySQL数据库,并且完成了users
这个简单的DEMO。
至此,我们已经实现了一个Express项目的完整流程,包括了路由、中间件、处理静态资源、接入数据库等内容。各位小伙伴只需要利用已经学习过的内容,发挥自己的创意,就可以完成一个属于自己的项目了。
接下来笔者会休息一段时间,先思考一下后续的学习思路,再继续更新本专栏的文章,山高路远,后会有期!
我是何以庆余年,如果文章对你起到了帮助,希望可以点个赞,谢谢!
如有问题,欢迎在留言区一起讨论。
转载自:https://juejin.cn/post/7242186721786331196