【NodeJS】Express+Sequelize写接口的整体流程

前提条件

开发 Node.js,首先就必须要安装 Node.js。推荐使用 nvm,它可以随意切换 node 版本。下载 nvm,具体可以看本人另一篇文章:nvm的作用、下载、使用、以及Mac使用时遇到commond not found:nvm如何解决

nvm官方:https://github.com/coreybutler/nvm-windows/

在这里插入图片描述

1. express-generator快速生成项目目录

下载

npm i -g express-generator@4

快速生成项目目录,--no-view 表示不需要视图。

express --no-view benchu-api 

进入项目目录,下载依赖包

npm i

运行命令,启动服务

npm start

访问 http://localhost:3000 看到如下页面,即为成功

在这里插入图片描述

2. nodemon

本文使用 node 专门搭建接口,所以在 routes/index.js 中将返回格式修改为 json 并删掉 public/index.html 文件。

在这里插入图片描述

刷新发现页面没有变化,需要重新 npm start,发现正常返回了 json。

在这里插入图片描述
我这里下载了浏览器插件,视觉上更加美观。

在这里插入图片描述

频繁执行 npm start 过于繁琐,更推荐安装 nodemon,它可以监听改动并自动重启。

下载 nodemon

npm i nodemon

修改 package.json,将 start 命令由 node 改为 nodemon

在这里插入图片描述

后面再执行 npm start 时就是通过 nodemon 启动服务了,修改后自动重启服务,刷新页面即可。

3. 使用Docker运行数据库

在 Windows 与 macOS 下,整个安装和使用的流程都非常的不同,而且将来部署到服务器后,也会有一些默认配置不同。例如以下这个:

low_case_table_names=0

它是让MySQL区分数据表名是否大小写的配置。默认在 Windows、macOS 和 Linux 下全都不同。而且当数据库初始化之后,也就说成功的启动过一次后,就不能修改了。

3.1 下载 Docker 并配置中国镜像

使用 Docker 来运行 MySQL 就不会有如上问题的困惑。这样在 Windows 与 macOS 上,甚至在 Linux 服务器上,它们的运行环境都是一致的。

官网下载:https://www.docker.com/get-started/

下载完成后,设置 => Docker Emgine中添加中国镜像的配置。

"registry-mirrors": [
  "https://docker.rainbond.cc"
]

在这里插入图片描述

保存配置后,切回项目目录,在 项目根目录下 新建一个 docker-compose.yml 文件。一定要在项目根目录中,放在其他地方会找不到的。然后将下面 MySQL 的配置复制进去。

services:
  mysql:
    image: mysql:8.3.0
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
    environment:
      - MYSQL_ROOT_PASSWORD=tianbenchu
      - MYSQL_LOWER_CASE_TABLE_NAMES=0
    ports:
      - "3306:3306"
    volumes:
      - ./data/mysql:/var/lib/mysql

执行如下命令,下载并启动 MySQL

docker-compose up -d

如下提示标识下载启动完毕

在这里插入图片描述

再次切回 Docker,发现出现项目,以后 启动/关闭 MySQL 可以通过按钮快速实现。

在这里插入图片描述

3.2 下载客户端连接数据库

想要方便的操作数据库,需要下载客户端,我这里以 MacOS 举例,到 AppStore 中下载 sequel ace 即可,Windows 可以使用 Navicat。

在这里插入图片描述

连接数据库

在这里插入图片描述

密码就是配置文件中的 MYSQL_ROOT_PASSWORD

在这里插入图片描述

4. 创建数据库与表

4.1 创建数据库与表

继上一步连接无误后,创建新数据库。

在这里插入图片描述

创建表,这里以 Articles 命名,注意首字母一定要大写,不大写的话将来部署到 Linux 服务器会报错;且一定要为复数形式,即后缀s,否则 nodejs 将无法查询到这个表。

在这里插入图片描述

4.2 主键

表创建完毕后,继续观察,有个 key,里面写的 PRI,它是主键的意思。一般,每个表都会设置一个 id,并把它设置成 primary key 表示它是唯一标识

主键,还会搭配自增 auto_increment 来使用,后续追加数据时 主键 自增。

在这里插入图片描述

4.3 字段类型

4.3.1 数字类型

类型 字节大小 有符号范围 (Signed) 无符号范围 (Unsigned)
TINYINT 1 -128 ~ 127 0 ~ 255
SMALLINT 2 -32768 ~ 32767 0 ~ 65535
MEDIUMINT 3 -8388608 ~ 8388607 0 ~ 16777215
INT/INTEGER 4 -2147483648 ~2147483647 0 ~ 4294967295
BIGINT 8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615

4.3.2 字符串类型:

类型 说明 使用场景
CHAR 固定长度,小型固定长度的数据 身份证号、手机号、电话、密码
VARCHAR 可变长度,小型数据 姓名、地址、品牌、型号、用户的评论、文章的标题
TEXT 可变长度,字符个数大于 4000 存储文章正文
LONGTEXT 可变长度,超大型文本数据 存储超大型文本数据

4.3.3 时间类型

类型 字节大小 示例
DATE 4 ‘2020-01-01’
TIME 3 ‘12:29:59’
DATETIME 8 ‘2020-01-01 12:29:59’
YEAR 1 ‘2017’
TIMESTAMP 4 ‘1970-01-01 00:00:01’ UTC ~ ‘2038-01-01 00:00:01’ UTC

4.3.4 总结 - 常用数据类型

类型 含义 说明
int 整数 需要设定长度
decimal 小数 金额常用,需要设定长度。如 decimal(10, 2) 表示共存 10 位数,其中小数占 2 位
char、varchar 字符串 文字类的常用,需要设定长度。例如身份证号、文章的标题使用。
text 文本 存储大文本,无需设定长度。一般会用文字很多的时候,例如文章的正文部分。
date、time、datetime 日期 记录时间

4.4 新增字段

了解了数据类型后,添加 titlecontent

在这里插入图片描述

5. 基础 sql 语句

5.1 增

INSERT INTO 表名 (1, ...) VALUES (1, ...)
// 多行插入
INSERT INTO 表名 (1, ...) VALUES (1, ...),(1, ...)...;

// 例如:
INSERT INTO `Articles` (`title`, `content`) VALUES ('行路难·其一', '长风破浪会有时,直挂云帆济沧海。');

在这里插入图片描述

可以看到数据已成功加入

在这里插入图片描述

5.2 删

DELETE FROM 表名 WHERE 条件

// 例如:
DELETE FROM `ARTICLES` WHERE `id`=5;

5.3 改

UPDATE 表名 SET1=1,2=2, ... WHERE 条件

// 例如:
UPDATE `Articles` SET `title`='黄鹤楼送孟浩然之广陵', `content`='故人西辞黄鹤楼,烟花三月下扬州。' WHERE `id`=2;

5.4 查

SELECT * FROM 表名;

// 例如:
SELECT * FROM `Articles`;

* 表示所有的字段,如果只需要查询某些字段,指定即可。

SELECT `id`, `title` FROM `Articles`;

条件查询

SELECT * FROM 表名 WHERE 条件;

// 想查询id大于2的文章:
SELECT * FROM `Articles` WHERE `id`>2;

排序,不添加声明,默认为 ASC 升序。

-- 查询id大于2的文章,按 id 从大到小排序,即降序
SELECT * FROM `Articles` WHERE `id`>2 ORDER BY `id` DESC;

-- 查询id大于2的文章,按 id 从小到大排列,即升序
SELECT * FROM `Articles` WHERE `id`>2 ORDER BY `id` ASC;

6. 使用 Sequelize ORM 简化书写 sql 语句

手写 sql 语句过于繁琐且容易出错,可以使用一些工具简化书写逻辑,本文使用 Sequelize ORM

6.1 Sequelize 常用命令

先体验一下 Sequelize 简洁的语法:

如全量查询

SELECT * FROM `Articles`;

// Sequelize 可以这么写
Article.findAll()

条件查询,findByPk 参数就是主键 primary key,说白了就是通过id来查找数据。

SELECT * FROM `Articles` WHERE `id`=2;

// Sequelize 可以这么写
Article.findByPk(2)

6.2 安装 Sequelize

先安装sequelize的命令行工具

npm i -g sequelize-cli

然后在项目目录中,安装当前项目所依赖的 sequelize 包和对数据库支持依赖的mysql2

npm i sequelize mysql2

初始化项目

sequelize init

初始化完毕后,项目目录下生成了几个文件:

在这里插入图片描述

6.3 新增文件的作用

初始化 sequelize 完毕后,项目目录生成了如下几个文件:

  • config/confi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

田本初

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值