本文档介绍如何通过 @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 结合使用,您需要安装必要的包
支持的数据库驱动程序包括
mysql2pg pg-hstoresqlite3tediousmariadb来源: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