菜单

TypeORM 集成

相关源文件

本指南详细介绍如何使用 NestJS 中的 TypeORM 进行数据库访问。TypeORM 是一个强大的对象关系映射 (ORM) 库,它为 SQL 数据库和 MongoDB 提供了数据库抽象。本页面重点介绍 TypeORM 与 NestJS 应用程序的集成。有关 Mongoose 集成的信息,请参阅 Mongoose 集成。有关 Sequelize 集成,请参阅 Sequelize 集成

概述

@nestjs/typeorm 包提供了 TypeORM 与 NestJS 之间的紧密集成,使您能够轻松地将仓库注入到服务中,并利用 TypeORM 的强大功能来访问数据库。

来源:sample/05-sql-typeorm/package.json, sample/13-mongo-typeorm/package.json

安装

要开始将 TypeORM 与 NestJS 结合使用,您需要安装必要的依赖项。

对于 SQL 数据库

npm install --save @nestjs/typeorm typeorm mysql2

mysql2 包可以替换为您选择的数据库驱动程序(例如,PostgreSQL 使用 pg,SQLite 使用 sqlite3)。

来源:sample/05-sql-typeorm/package.json

对于 MongoDB

npm install --save @nestjs/typeorm typeorm mongodb

来源:sample/13-mongo-typeorm/package.json

基本模块设置

TypeORM 模块注册

在您的应用程序中,您需要导入 TypeORM 模块并对其进行配置以连接到数据库。

对于 SQL 数据库

来源:sample/05-sql-typeorm/package.json

对于 MongoDB

MongoDB 的设置与 SQL 数据库类似,但配置略有不同。

SQL 数据库的配置示例

要将 TypeORM 注册到您的应用程序中,您需要将 TypeOrmModule 导入到您的根模块中(通常是 app.module.ts)。

来源:sample/05-sql-typeorm/docker-compose.yml

MongoDB 的配置示例

对于 MongoDB 集成

来源:sample/13-mongo-typeorm/package.json, integration/docker-compose.yml

实体定义

实体是 TypeORM 的基石,代表数据库表或集合。

SQL 实体示例

MongoDB 实体示例

功能模块和仓库注入

定义好实体后,使用功能模块中的 forFeature() 方法将它们注册到 TypeORM。

然后在您的服务中注入仓库

连接管理

多个连接

NestJS 支持通过 TypeORM 进行多个数据库连接。当您的应用程序需要连接到不同的数据库时,这非常有用。

要在功能模块中使用特定连接

来源:sample/05-sql-typeorm/docker-compose.yml

高级配置

使用数据库 URL 进行配置

使用数据源

TypeORM v0.3 引入了数据源的概念(以前称为连接)。您可以单独创建数据源并与 NestJS 一起使用。

异步配置

适用于连接详细信息在运行时才能确定的环境

高级 TypeORM 功能

处理事务

事务装饰器

自定义仓库

尽管 TypeORM v0.3.x 已弃用自定义仓库模式,但您仍然可以实现类似的功能。

测试

在测试使用 TypeORM 仓库的组件时,您可以创建模拟仓库。

来源:sample/05-sql-typeorm/test/jest-e2e.json

数据库迁移

TypeORM 提供了数据库模式更改的迁移功能。

实际考量

实体注册

在 NestJS 中有多种方式可以将实体注册到 TypeORM。

  1. 手动实体注册
  1. 使用 glob 路径(由于 webpack 不推荐在生产环境中使用)
  1. 使用自动实体发现(适用于 NestJS v7 及更高版本)

生产环境最佳实践

  1. 在生产环境中禁用同步
  1. 在生产环境中使用迁移进行模式更改
  2. 实现适当的连接池
  3. 为数据库操作设置适当的错误处理

与其他 NestJS 功能的关系

NestJS 中的 TypeORM 集成与其他框架功能无缝协作。

来源:sample/05-sql-typeorm/package.json, sample/13-mongo-typeorm/package.json

结论

NestJS 中的 TypeORM 集成提供了一种强大而灵活的数据库工作方式。@nestjs/typeorm 包抽象了许多数据库操作的复杂性,使开发人员能够专注于应用程序逻辑,同时利用 TypeORM 的强大功能。

对于 SQL 数据库,TypeORM 支持多种平台,包括 MySQL、PostgreSQL、MariaDB、SQLite、MS SQL Server、Oracle 和 SAP Hana。对于文档数据库,它支持 MongoDB。

通过遵循本指南中概述的模式,您可以有效地将数据库功能集成到您的 NestJS 应用程序中,同时保持代码的整洁和可维护性。