NestJS Tenancy模块启动与配置教程
项目的目录结构及介绍
NestJS Tenancy 是一个用于 NestJS 和 Mongoose 的多租户模块,目前仅支持 MongoDB。它允许你在 NestJS 应用程序中轻松实现多租户架构。
项目的目录结构如下:
nestjs-tenancy/
├── lib/
│ ├── index.d.ts
│ ├── index.js
│ ├── index.ts
│ └── tenancy.module.ts
├── tests/
│ └── test.module.ts
├── .eslintrc.js
├── .gitignore
├── .npmignore
├── .prettierrc
├── .release-it.json
├── LICENSE
├── README.md
├── nest-cli.json
├── package.json
├── tsconfig.build.json
└── tsconfig.json
lib/
: 模块的核心代码目录。tests/
: 模块的测试文件目录。- 其他文件:配置、许可证、文档等相关文件。
项目的启动文件介绍
启动 NestJS Tenancy 模块主要包括以下几个步骤:
- 安装模块: 使用
npm install @needle-innovision/nestjs-tenancy
命令安装模块。 - 配置模块: 在你的 NestJS 应用程序中引入
TenancyModule
,并根据需要配置租户标识符和数据库连接。 - 创建模型: 定义你的数据模型,并使用
SchemaFactory.createForClass
方法创建 Mongoose 模式。 - 注入模型: 在服务中注入多租户模型,以便在租户隔离的环境中操作数据。
- 使用服务: 在控制器中使用服务,以便执行 CRUD 操作。
以下是一个示例配置:
import { Module } from '@nestjs/common';
import { TenancyModule } from '@needle-innovision/nestjs-tenancy';
import { CatsModule } from './cats.module';
@Module({
imports: [
TenancyModule.forRoot({
tenantIdentifier: 'X-TENANT-ID',
options: () => ({}),
uri: (tenantId: string) => `mongodb://localhost/test-tenant-${tenantId}`,
}),
CatsModule,
],
})
export class AppModule {}
项目的配置文件介绍
NestJS Tenancy 模块支持多种配置方式,包括环境变量、配置文件等。以下是一个使用配置文件的示例:
- 创建配置文件: 创建一个名为
config.ts
的文件,并导出一个配置函数。
export default () => ({
database: {
uri: process.env.MONGO_URI,
},
});
- 加载配置文件: 在
AppModule
中使用ConfigModule
加载配置文件。
import { Module } from '@nestjs/common';
import { TenancyModule } from '@needle-innovision/nestjs-tenancy';
import { CatsModule } from './cats.module';
import configuration from './config';
@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
load: [configuration],
}),
TenancyModule.forRootAsync({
useFactory: (configService: ConfigService) => ({
tenantIdentifier: 'X-TENANT-ID',
options: () => ({}),
uri: (tenantId: string) => `${configService.get('database.uri')}/test-tenant-${tenantId}`,
}),
inject: [ConfigService],
}),
CatsModule,
],
})
export class AppModule {}
通过以上步骤,你可以成功启动和配置 NestJS Tenancy 模块,实现多租户架构。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考