forked from datawhale/whale-town-end
71 lines
2.2 KiB
TypeScript
71 lines
2.2 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { ConfigModule } from '@nestjs/config';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { AppController } from './app.controller';
|
|
import { AppService } from './app.service';
|
|
import { LoggerModule } from './core/utils/logger/logger.module';
|
|
import { UsersModule } from './core/db/users/users.module';
|
|
import { LoginCoreModule } from './core/login_core/login_core.module';
|
|
import { LoginModule } from './business/login/login.module';
|
|
import { RedisModule } from './core/redis/redis.module';
|
|
import { AdminModule } from './business/admin/admin.module';
|
|
|
|
/**
|
|
* 检查数据库配置是否完整 by angjustinl 2025-12-17
|
|
*
|
|
* @returns 是否配置了数据库
|
|
*/
|
|
function isDatabaseConfigured(): boolean {
|
|
const requiredEnvVars = ['DB_HOST', 'DB_PORT', 'DB_USERNAME', 'DB_PASSWORD', 'DB_NAME'];
|
|
return requiredEnvVars.every(varName => process.env[varName]);
|
|
}
|
|
|
|
/**
|
|
* 应用主模块
|
|
*
|
|
* 功能描述:
|
|
* - 整合所有功能模块
|
|
* - 配置全局服务和中间件
|
|
* - 支持数据库和内存存储的自动切换
|
|
*
|
|
* 存储模式选择:
|
|
* - 如果配置了数据库环境变量,使用数据库模式
|
|
* - 如果未配置数据库,自动回退到内存模式
|
|
* - 内存模式适用于快速开发和测试
|
|
*/
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({
|
|
isGlobal: true,
|
|
envFilePath: '.env',
|
|
}),
|
|
LoggerModule,
|
|
RedisModule,
|
|
// 条件导入TypeORM模块
|
|
...(isDatabaseConfigured() ? [
|
|
TypeOrmModule.forRoot({
|
|
type: 'mysql',
|
|
host: process.env.DB_HOST,
|
|
port: parseInt(process.env.DB_PORT),
|
|
username: process.env.DB_USERNAME,
|
|
password: process.env.DB_PASSWORD,
|
|
database: process.env.DB_NAME,
|
|
entities: [__dirname + '/**/*.entity{.ts,.js}'],
|
|
synchronize: false,
|
|
// 添加连接超时和重试配置
|
|
connectTimeout: 10000,
|
|
retryAttempts: 3,
|
|
retryDelay: 3000,
|
|
}),
|
|
] : []),
|
|
// 根据数据库配置选择用户模块模式
|
|
isDatabaseConfigured() ? UsersModule.forDatabase() : UsersModule.forMemory(),
|
|
LoginCoreModule,
|
|
LoginModule,
|
|
AdminModule,
|
|
],
|
|
controllers: [AppController],
|
|
providers: [AppService],
|
|
})
|
|
export class AppModule {}
|