菜单

Sequelize 集成

相关源文件

本文档介绍如何通过 @nestjs/sequelize 包将 Sequelize ORM 与 NestJS 应用程序集成。Sequelize 是一个基于 Promise 的 Node.js SQL 数据库 ORM,它支持可靠的事务支持、关系、预加载和延迟加载等功能。有关 TypeORM 集成,请参阅 TypeORM 集成

概述

@nestjs/sequelize 包在 Sequelize ORM 和 NestJS 框架之间提供了无缝集成,它保留了框架的架构模式,同时暴露了 Sequelize 的强大功能。此集成允许您使用装饰器定义模型,将存储库注入服务,并利用 NestJS 的依赖注入系统。

来源:sample/07-sequelize/package.json

安装

要开始将 Sequelize 与 NestJS 结合使用,您需要安装必要的包

支持的数据库驱动程序包括

  • MySQL 的 mysql2
  • PostgreSQL 的 pg pg-hstore
  • SQLite 的 sqlite3
  • Microsoft SQL Server 的 tedious
  • MariaDB 的 mariadb

来源:sample/07-sequelize/package.json

基本配置

要在 NestJS 应用程序中使用 Sequelize,您需要在根模块(通常是 AppModule)中导入 SequelizeModule

根模块配置

forRoot() 方法支持 Sequelize 构造函数中的所有 Sequelize 配置属性,以及一些额外的属性

属性描述
dialect数据库类型('mysql', 'postgres', 'sqlite', 'mssql', 'mariadb')
主机数据库主机
port数据库端口
username数据库用户名
password数据库密码
database数据库名称
模型需要加载的模型数组
autoLoadModels如果为 true,模型将自动加载
synchronize如果为 true,模型将自动同步(生产环境中请谨慎)

来源:sample/07-sequelize/package.json

定义模型

NestJS 中的 Sequelize 模型被定义为类,使用来自 sequelize-typescript 的装饰器。每个模型代表数据库中的一个表。

示例模型定义

来源:sample/07-sequelize/package.json

模块集成

功能模块

对于需要使用 Sequelize 模型的每个功能模块,都应该导入 SequelizeModule.forFeature() 并指定要在当前作用域中注册的模型。

这将模型注册到 Sequelize,并允许它们被注入到此模块中的服务中。

来源:sample/07-sequelize/package.json

存储库模式和依赖注入

NestJS 配合 Sequelize 遵循存储库模式。可以使用 @InjectModel() 装饰器将模型注入到服务中。

注入模型的示例服务

来源:sample/07-sequelize/package.json

关联和关系

Sequelize 使用装饰器支持模型之间的各种关系。

一对一关系

一对多关系

多对多关系

来源:sample/07-sequelize/package.json

数据库事务

事务确保多个数据库操作要么全部成功,要么全部失败。NestJS 通过 Sequelize 对象提供了一种方便的方式来处理 Sequelize 事务。

来源:sample/07-sequelize/package.json

高级配置

连接池

连接池可以在 SequelizeModule.forRoot() 选项中配置

多个数据库连接

对于需要连接到多个数据库的应用程序,可以使用带有命名配置的 SequelizeModule.forRootAsync()

然后可以在功能模块中指定使用哪个连接

来源:sample/07-sequelize/package.json

测试

在单元测试使用 Sequelize 模型的组件时,您可以使用 getModelToken() 函数来提供模拟实现

来源:sample/07-sequelize/package.json

迁移和播种

@nestjs/sequelize 模块不直接处理迁移,但您可以使用 Sequelize 的 CLI 进行数据库迁移和播种。

安装 Sequelize CLI

在项目根目录创建一个 .sequelizerc 文件

然后您可以使用 Sequelize CLI 命令

来源:sample/07-sequelize/package.json

架构概述

下图说明了 NestJS 应用程序中 Sequelize 集成的完整架构

来源:sample/07-sequelize/package.json

结论

@nestjs/sequelize 包提供了 NestJS 和 Sequelize ORM 之间的强大集成,使您能够利用这两个框架的强大功能。通过遵循本文档中描述的模式和实践,您可以使用 NestJS 和 Sequelize 构建可维护且可扩展的数据库驱动的应用程序。

请记住,在生产环境中使用 Sequelize 同步时要格外小心,因为它可能导致数据丢失。对于生产部署,建议使用迁移来管理数据库模式更改。

来源:sample/07-sequelize/package.json