import { Controller, Get, UseGuards } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard'; import { Public } from '../auth/decorators/public.decorator'; import * as fs from 'fs'; import * as path from 'path'; /** * 配置验证控制器 * 用于验证环境配置文件是否正确加载 */ @Controller('config-verification') export class ConfigVerificationController { constructor(private configService: ConfigService) {} /** * 公开接口,用于验证配置加载 */ @Public() @Get('env-info') getEnvInfo() { const nodeEnv = process.env.NODE_ENV || 'development'; const expectedEnvFile = `.env.${nodeEnv}`; // 匹配实际文件名格式:.development.env const envFilePath = path.join(process.cwd(), expectedEnvFile); const fallbackEnvPath = path.join(process.cwd(), '.env'); // 检查文件是否存在 const envFileExists = fs.existsSync(envFilePath); const fallbackExists = fs.existsSync(fallbackEnvPath); // 获取一些关键配置(不暴露敏感信息) const config = { nodeEnv, expectedEnvFile, envFileExists, fallbackExists, envFilePath, fallbackEnvPath, loadedFrom: envFileExists ? expectedEnvFile : fallbackExists ? '.env' : '环境变量', // 显示具体配置信息(包括实际值) configs: { PORT: this.configService.get('PORT') || process.env.PORT || 3001, DATABASE_URL: this.configService.get('DATABASE_URL') || process.env.DATABASE_URL || '未配置', JWT_SECRET: this.configService.get('JWT_SECRET') || process.env.JWT_SECRET || '未配置', NODE_ENV: this.configService.get('NODE_ENV') || nodeEnv, }, publicConfigs: { PORT: this.configService.get('PORT') || process.env.PORT || 3001, NODE_ENV: this.configService.get('NODE_ENV') || nodeEnv, }, }; return { code: 200, message: '配置信息', data: config, }; } /** * 需要认证的接口,显示更多配置详情(仍隐藏敏感信息) */ @Get('detailed') getDetailedConfig() { const nodeEnv = process.env.NODE_ENV || 'development'; const expectedEnvFile = `.env.${nodeEnv}`; const envFilePath = path.join(process.cwd(), expectedEnvFile); // 读取文件内容(用于验证,但不返回敏感信息) let fileContent = ''; try { if (fs.existsSync(envFilePath)) { fileContent = fs.readFileSync(envFilePath, 'utf-8'); } } catch (error) { // 忽略读取错误 } // 统计配置项数量 const configKeys = fileContent .split('\n') .filter((line) => line.trim() && !line.trim().startsWith('#')) .map((line) => line.split('=')[0]?.trim()) .filter(Boolean); return { code: 200, message: '详细配置信息', data: { nodeEnv, expectedEnvFile, fileExists: fs.existsSync(envFilePath), configKeysCount: configKeys.length, configKeys: configKeys, // 只显示键名,不显示值 // 验证关键配置是否加载 verification: { DATABASE_URL: !!this.configService.get('DATABASE_URL'), JWT_SECRET: !!this.configService.get('JWT_SECRET'), PORT: !!this.configService.get('PORT'), }, }, }; } }