Skip to main content
Glama
app.module.ts4.2 kB
import { Module } from '@nestjs/common'; import { ConfigModule, ConfigService } from '@nestjs/config'; import { TerminusModule } from '@nestjs/terminus'; import { ScheduleModule } from '@nestjs/schedule'; import { EventEmitterModule } from '@nestjs/event-emitter'; import { ThrottlerModule, ThrottlerGuard } from '@nestjs/throttler'; import { APP_GUARD, APP_INTERCEPTOR, APP_FILTER } from '@nestjs/core'; // 配置 import { AppConfigService } from './config/app-config.service'; import { validationSchema } from './config/validation.schema'; // 模块 import { DatabaseModule } from './database/database.module'; import { CoreModule } from './modules/core/core.module'; import { SecurityModule } from './modules/security/security.module'; import { OpenAPIModule } from './modules/openapi/openapi.module'; import { MCPModule } from './modules/mcp/mcp.module'; import { ServersModule } from './modules/servers/servers.module'; import { HealthModule } from './modules/health/health.module'; import { ConfigModule as AppConfigModule } from './modules/config/config.module'; import { WebSocketModule } from './modules/websocket/websocket.module'; import { AiAssistantModule } from './modules/ai-assistant/ai-assistant.module'; import { DocumentsModule } from './modules/documents/documents.module'; // 通用组件 import { LoggingInterceptor } from './common/interceptors/logging.interceptor'; import { HttpExceptionFilter } from './common/filters/http-exception.filter'; import { MCPExceptionFilter } from './common/filters/mcp-exception.filter'; // 控制器 import { AppController } from './app.controller'; @Module({ imports: [ // 全局配置模块 ConfigModule.forRoot({ isGlobal: true, envFilePath: [ '.env.local', '.env.development', '.env.production', '.env', ], validationSchema, validationOptions: { allowUnknown: true, abortEarly: false, }, expandVariables: true, }), // 调度任务模块 ScheduleModule.forRoot(), // 事件发射器模块 EventEmitterModule.forRoot({ wildcard: false, delimiter: '.', newListener: false, removeListener: false, maxListeners: 10, verboseMemoryLeak: false, ignoreErrors: false, }), // API限流模块 ThrottlerModule.forRootAsync({ imports: [ConfigModule], useFactory: (configService: ConfigService) => [ { ttl: configService.get<number>('THROTTLE_TTL', 60) * 1000, // 时间窗口(毫秒) limit: configService.get<number>('THROTTLE_LIMIT', 10), // 请求限制 }, ], inject: [ConfigService], }), // 健康检查模块 TerminusModule, // 数据库模块 DatabaseModule, // 核心模块(包含系统初始化) CoreModule, // 功能模块 SecurityModule, OpenAPIModule, MCPModule, ServersModule, HealthModule, AppConfigModule, WebSocketModule, AiAssistantModule, DocumentsModule, ], controllers: [AppController], providers: [ // 全局配置服务 AppConfigService, // 全局守卫 { provide: APP_GUARD, useClass: ThrottlerGuard, }, // 全局拦截器 { provide: APP_INTERCEPTOR, useClass: LoggingInterceptor, }, // 全局异常过滤器 { provide: APP_FILTER, useClass: HttpExceptionFilter, }, { provide: APP_FILTER, useClass: MCPExceptionFilter, }, ], exports: [AppConfigService], }) export class AppModule { constructor(private readonly configService: ConfigService) {} onModuleInit() { const logger = new (require('@nestjs/common').Logger)('AppModule'); logger.log('🎯 Application modules initialized'); logger.log(`📊 Environment: ${this.configService.get('NODE_ENV')}`); logger.log(`🚪 API Port: ${this.configService.get('PORT')}`); logger.log(`🎛️ MCP Port: ${this.configService.get('MCP_PORT')}`); if (this.configService.get('METRICS_ENABLED')) { logger.log('📈 Metrics collection enabled'); } logger.log('🔐 JWT authentication enabled'); } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/zaizaizhao/mcp-swagger-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server