bun-server-troubleshooting by dangaogit/bun-server-skills
npx skills add https://github.com/dangaogit/bun-server-skills --skill bun-server-troubleshooting症状 :
Error: Cannot resolve dependency at index 0 of MyController.
Parameter type is undefined. Use @Inject() decorator to specify the dependency type.
原因 :
tsconfig.json 配置tsconfig.jsontsconfig.json解决方案 :
确保 tsconfig.json 包含:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
对于 monorepo 项目,在根目录添加 tsconfig.json。
变通方案 : 显式使用 @Inject():
constructor(@Inject(UserService) private userService: UserService) {}
症状 :
Error: Provider not found for token: Symbol(@dangao/bun-server:events:emitter)
原因 : 需要 forRoot() 的模块未配置。
解决方案 :
// ❌ 错误
@Module({
imports: [EventModule],
})
// ✅ 正确
@Module({
imports: [EventModule.forRoot({ wildcard: true })],
})
原因 : 事件监听器未初始化。
解决方案 : 在 registerModule 后调用 initializeListeners:
import { Application, EventModule, ModuleRegistry } from "@dangao/bun-server";
const app = new Application({ port: 3100 });
app.registerModule(AppModule);
// 初始化事件监听器
const rootModuleRef = ModuleRegistry.getInstance().getModuleRef(AppModule);
if (rootModuleRef?.container) {
EventModule.initializeListeners(
rootModuleRef.container,
[NotificationListener, AuditListener], // 所有 @OnEvent 类
);
}
app.listen();
问题 : 子模块无法解析依赖。
解决方案 : 在模块定义之前配置 forRoot():
// ✅ 先配置
EventModule.forRoot({ wildcard: true });
LoggerModule.forRoot({ level: LogLevel.INFO });
// 然后定义模块
@Module({
imports: [EventModule],
providers: [UserService],
})
class UserModule {}
症状 : 栈溢出或服务未定义。
解决方案 : 使用 forwardRef:
@Injectable()
class ServiceA {
constructor(
@Inject(forwardRef(() => ServiceB)) private b: ServiceB
) {}
}
import "reflect-metadata";
// 检查是否生成了 paramtypes
console.log(
"paramTypes:",
Reflect.getMetadata("design:paramtypes", YourController)
);
// 预期: [class ServiceA, class ServiceB, ...]
// 问题: undefined 或 []
const container = app.getContainer();
// 列出所有已注册的提供者
console.log("Providers:", container.getProviders());
// 尝试手动解析
try {
const service = container.resolve(UserService);
console.log("Resolved:", service);
} catch (error) {
console.error("Resolution failed:", error);
}
import { ModuleRegistry } from "@dangao/bun-server";
const moduleRef = ModuleRegistry.getInstance().getModuleRef(AppModule);
console.log("Module container:", moduleRef?.container);
console.log("Module metadata:", moduleRef?.metadata);
// ❌ 缺少装饰器
class UserService {
getUser() { return {}; }
}
// ✅ 正确
@Injectable()
class UserService {
getUser() { return {}; }
}
import type// ❌ 错误 - 仅类型导入会在运行时移除 Symbol
import type { UserService } from "./user.service";
// ✅ 正确 - 同时保留接口和 Symbol
import { UserService } from "./user.service";
// ❌ 服务无法被其他模块访问
@Module({
providers: [SharedService],
})
class SharedModule {}
// ✅ 导出使其可用
@Module({
providers: [SharedService],
exports: [SharedService],
})
class SharedModule {}
tsconfig.json 包含 experimentalDecorators: truetsconfig.json 包含 emitDecoratorMetadata: true@Injectable() 装饰器forRoot() 的模块在定义前已配置providers 中注册exports 中EventModule.initializeListeners()每周安装数
1
代码仓库
GitHub 星标数
1
首次出现
2026年2月4日
安装于
trae1
qoder1
trae-cn1
cursor1
claude-code1
Symptom :
Error: Cannot resolve dependency at index 0 of MyController.
Parameter type is undefined. Use @Inject() decorator to specify the dependency type.
Causes :
tsconfig.json configurationtsconfig.jsontsconfig.jsonSolution :
Ensure tsconfig.json includes:
{
"compilerOptions": {
"experimentalDecorators": true,
"emitDecoratorMetadata": true
}
}
For monorepo projects, add tsconfig.json to root directory.
Workaround : Use explicit @Inject():
constructor(@Inject(UserService) private userService: UserService) {}
Symptom :
Error: Provider not found for token: Symbol(@dangao/bun-server:events:emitter)
Cause : Module requiring forRoot() was not configured.
Solution :
// ❌ Wrong
@Module({
imports: [EventModule],
})
// ✅ Correct
@Module({
imports: [EventModule.forRoot({ wildcard: true })],
})
Cause : Event listeners not initialized.
Solution : Call initializeListeners after registerModule:
import { Application, EventModule, ModuleRegistry } from "@dangao/bun-server";
const app = new Application({ port: 3100 });
app.registerModule(AppModule);
// Initialize event listeners
const rootModuleRef = ModuleRegistry.getInstance().getModuleRef(AppModule);
if (rootModuleRef?.container) {
EventModule.initializeListeners(
rootModuleRef.container,
[NotificationListener, AuditListener], // All @OnEvent classes
);
}
app.listen();
Problem : Child modules fail to resolve dependencies.
Solution : Configure forRoot() before module definitions:
// ✅ Configure first
EventModule.forRoot({ wildcard: true });
LoggerModule.forRoot({ level: LogLevel.INFO });
// Then define modules
@Module({
imports: [EventModule],
providers: [UserService],
})
class UserModule {}
Symptom : Stack overflow or undefined services.
Solution : Use forwardRef:
@Injectable()
class ServiceA {
constructor(
@Inject(forwardRef(() => ServiceB)) private b: ServiceB
) {}
}
import "reflect-metadata";
// Check if paramtypes are generated
console.log(
"paramTypes:",
Reflect.getMetadata("design:paramtypes", YourController)
);
// Expected: [class ServiceA, class ServiceB, ...]
// Problem: undefined or []
const container = app.getContainer();
// List all registered providers
console.log("Providers:", container.getProviders());
// Try manual resolution
try {
const service = container.resolve(UserService);
console.log("Resolved:", service);
} catch (error) {
console.error("Resolution failed:", error);
}
import { ModuleRegistry } from "@dangao/bun-server";
const moduleRef = ModuleRegistry.getInstance().getModuleRef(AppModule);
console.log("Module container:", moduleRef?.container);
console.log("Module metadata:", moduleRef?.metadata);
// ❌ Missing decorator
class UserService {
getUser() { return {}; }
}
// ✅ Correct
@Injectable()
class UserService {
getUser() { return {}; }
}
import type with Symbol+Interface Pattern// ❌ Wrong - type-only import removes Symbol at runtime
import type { UserService } from "./user.service";
// ✅ Correct - keeps both interface and Symbol
import { UserService } from "./user.service";
// ❌ Service not accessible to other modules
@Module({
providers: [SharedService],
})
class SharedModule {}
// ✅ Export to make available
@Module({
providers: [SharedService],
exports: [SharedService],
})
class SharedModule {}
tsconfig.json has experimentalDecorators: truetsconfig.json has emitDecoratorMetadata: true@Injectable() decoratorforRoot() are configured before definitionsprovidersexportsEventModule.initializeListeners()Weekly Installs
1
Repository
GitHub Stars
1
First Seen
Feb 4, 2026
Installed on
trae1
qoder1
trae-cn1
cursor1
claude-code1
Flutter应用架构设计指南:分层结构、数据层实现与最佳实践
4,000 周安装