3工具篇:数据库

前言

在上一章中,我们通过接入飞书应用以及机器人消息推送,对使用 NestJS 框架以及后端业务开发有了一定的经验,也开启了正式开发的第一步。

在一个普通的后端业务开发中基本逃不开 CURD,也就是对数据的常规操作。在技术选型中提到,网关系统中将同时使用 2 种数据库 MySQL 与 MongoDB(分别是关系型数据库与非关系数据库的代表),分别进行用户与物料服务的数据存储。

作为基础脚手架的搭建,为了便于业务开发同学的使用与体验,比较好的方式是使用配置模式提供统一的 API 调用减少开发的理解与接入成本。

本章我们将学习对数据库的封装以及常规的数据库操作。

TypeORM

日常对数据库的操作需要借助于 SQL,至少需要掌握基础的 SQL 语法就有建表、增删改查等。但如果想要在代码中直接实现对数据库的操作,就需要去写大量 SQL ,这在可读性、维护性及开发体验上都非常糟糕

于是,ORM 框架应运而生。这类的框架是为了解决面向对象与关系数据库存在的互不匹配的现象,把面向 SQL 开发转变为面向对象开发,开发不需要关注底层实现细节,而是以操作对象的模式使用数据库。

对象关系映射(Object Relational Mapping,简称 ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配现象的技术。

TypeORM 作为 Node.js 中老牌的 ORM 框架,无论是接口定义,还是代码实现方面都简单易懂、可读性高,也很容易对接多种数据源。

虽然市面上也有其他不错的 ORM 框架,比如 Sequelize、Prisma 等,但 TypeORM 使用 TypeScript 编写,在 NestJS 框架下运行得非常好,也是 NestJS 首推的 ORM 框架,有开箱即用的 @nestjs/typeorm 软件包支持。

综上所述,我们的 ORM 框架也将选用 TypeORM 来开发(看个人喜好与需求,如果喜欢 GraphQL 的,使用 Prisma 更好)。

封装

NestJS 使用 TypeORM 的方式有两种。一种是 NestJS 提供的 @nestjs/typeorm 集成包,可以导出 TypeOrmModule.forRoot 方法来连接数据库,同时可以使用 ormconfig.json 将数据库链接配置项剥离。另外一种是直接使用 typeorm,自由封装 Providers 导入使用。

两种方案各有优缺点,使用 @nestjs/typeorm 集成的方案较为简便,但自建的业务脚手架需要两种数据库保证在开发中体验一致性,此外之前已经自定义了全局环境变量的配置,没有必要再多一个 ormconfig.json 的配置来增加额外理解成本,所以接下来我们将使用第二种方案来连接数据库。

第一步:跟之前一样,为了使用 TypeORM,先安装以下依赖。

$ yarn add typeorm mysql2 mongoose

第二步:在 dev.yaml 中添加数据库配置参数。


MONGODB_CONFIG: name: "fast_gateway_test" # 自定义次数据库链接名称 type: mongodb # 数据库链接类型 url: "mongodb://localhost:27017" # 数据库链接地址 username: "xxxx" # 数据库链接用户名 password: "123456" # 数据库链接密码 database: "fast_gateway_test" # 数据库名 entities: "mongo" # 自定义加载类型 logging: false # 数据库打印日志 synchronize: true # 是否开启同

你可能感兴趣的:(NestJS,项目实战,oracle,数据库)