bun-server-module
1
总安装量
1
周安装量
#55086
全站排名
安装命令
npx skills add https://github.com/dangaogit/bun-server-skills --skill bun-server-module
Agent 安装分布
trae
1
qoder
1
trae-cn
1
cursor
1
claude-code
1
Skill 文档
Bun Server Module System
Basic Module
import { Module, Controller, Injectable } from "@dangao/bun-server";
@Injectable()
class UserService {
findAll() {
return [{ id: 1, name: "Alice" }];
}
}
@Controller("/users")
class UserController {
constructor(private readonly userService: UserService) {}
}
@Module({
controllers: [UserController],
providers: [UserService],
})
class UserModule {}
Module Structure
@Module({
imports: [], // Import other modules
controllers: [], // Controllers in this module
providers: [], // Service providers
exports: [], // Services exported for other modules
})
class SomeModule {}
Module Imports and Exports
// user.module.ts
@Module({
providers: [UserService],
exports: [UserService], // Export for other modules
})
class UserModule {}
// order.module.ts
@Module({
imports: [UserModule], // Import UserModule
providers: [OrderService],
controllers: [OrderController],
})
class OrderModule {}
// order.service.ts
@Injectable()
class OrderService {
constructor(private readonly userService: UserService) {} // Can inject
}
forRoot Pattern
Used to configure global modules (called once):
import {
ConfigModule,
EventModule,
LoggerModule,
SecurityModule,
LogLevel,
} from "@dangao/bun-server";
// Configure global modules
ConfigModule.forRoot({
defaultConfig: {
app: { name: "My App", port: 3100 },
database: { url: "postgres://..." },
},
});
EventModule.forRoot({
wildcard: true,
maxListeners: 20,
});
LoggerModule.forRoot({
level: LogLevel.INFO,
});
// Import in root module
@Module({
imports: [ConfigModule, EventModule, LoggerModule],
controllers: [AppController],
})
class AppModule {}
Important: forRoot() must be called before module definitions.
Built-in Modules Requiring forRoot
| Module | Purpose | Configuration Example |
|---|---|---|
ConfigModule |
Configuration management | forRoot({ defaultConfig: {} }) |
EventModule |
Event system | forRoot({ wildcard: true }) |
LoggerModule |
Logging | forRoot({ level: LogLevel.INFO }) |
SecurityModule |
Security/Auth | forRoot({ jwt: { secret: '...' } }) |
DatabaseModule |
Database | forRoot({ type: 'postgres', ... }) |
CacheModule |
Caching | forRoot({ ttl: 60 }) |
SessionModule |
Sessions | forRoot({ secret: '...' }) |
HealthModule |
Health checks | forRoot({}) |
MetricsModule |
Metrics | forRoot({}) |
SwaggerModule |
API docs | forRoot({ title: '...' }) |
Modular Application Structure
src/
âââ main.ts
âââ app.module.ts # Root module
âââ users/
â âââ user.module.ts
â âââ user.controller.ts
â âââ user.service.ts
â âââ dto/
â âââ create-user.dto.ts
âââ orders/
â âââ order.module.ts
â âââ order.controller.ts
â âââ order.service.ts
âââ common/
âââ common.module.ts
âââ services/
âââ logger.service.ts
Complete Example
// common/common.module.ts
@Module({
providers: [LoggerService, UtilsService],
exports: [LoggerService, UtilsService],
})
class CommonModule {}
// users/user.module.ts
@Module({
imports: [CommonModule],
controllers: [UserController],
providers: [UserService],
exports: [UserService],
})
class UserModule {}
// orders/order.module.ts
@Module({
imports: [CommonModule, UserModule],
controllers: [OrderController],
providers: [OrderService],
})
class OrderModule {}
// app.module.ts
ConfigModule.forRoot({ defaultConfig: {} });
LoggerModule.forRoot({ level: LogLevel.INFO });
@Module({
imports: [ConfigModule, LoggerModule, UserModule, OrderModule],
})
class AppModule {}
// main.ts
const app = new Application({ port: 3100 });
app.registerModule(AppModule);
app.listen();
Getting Module References
import { ModuleRegistry } from "@dangao/bun-server";
const app = new Application({ port: 3100 });
app.registerModule(AppModule);
// Get module reference
const moduleRef = ModuleRegistry.getInstance().getModuleRef(AppModule);
// Resolve services from module container
const userService = moduleRef?.container.resolve(UserService);
Best Practices
- Split by feature: One module per business domain
- Explicit exports: Only export services needed by other modules
- Avoid circular imports: Use shared modules to resolve dependencies
- Global modules at root: Keep
ConfigModule,LoggerModuleetc. at root level