我有一個CheckModule,它在forRoot方法中使用一個常量CHECK_OPTIONS接受配置:
@Module({})
export class CheckModule {
static forRoot(options? : CheckOptions)。DynamicModule {
return {
module: CheckModule。
providers: [
{
provide: CHECK_OPTIONS,
useValue: options,
},
CheckService,
],
exports: [CheckService]。
};
}
我的CheckService使用選項:
@Injectable()
export class CheckService {
...
constructor(@Inject(CHECK_OPTIONS) options: CheckOptions) {}
...
當我除錯應用程式時,一切作業正常。但是,一旦我為生產構建并在Heroku上提供服務時,我得到一個錯誤。
# Production build。
nx build $PROJECT_NAME --prod
# serving the app
node dist/apps/worker/main.js
我得到一個錯誤:
我在這里錯過了什么嗎?我有點無從下手...... uj5u.com熱心網友回復: 似乎你的模塊需要是全域的。
試著在 uj5u.com熱心網友回復: 在我的 這個方法有一個可選的引數,用于 然而,我的CheckService期望一個 因此,我已經將代碼從: 致: 參見https://docs.nestjs.com/providers#optional-providers以了解更多關于
標籤:ERROR [ExceptionHandler] Nest不能解決CheckService的依賴關系(?請確保索引[0]處的引數 CHECK_OPTIONS 在 CheckModule 背景關系中可用。
@Module({})之前添加@Global()裝飾器。app.module中,我匯入了CheckModule為:imports: [
CheckModule.forRoot()。
...
]
CheckOptions:forRoot(options?: CheckOptions) { ... }CHECK_OPTIONS,它是非可選的。這就是導致錯誤的原因。正確地將這個InjectionToken標記為@Optional()可以解決這個問題。
constructor(@Inject(CHECK_OPTIONS) options? CheckOptions) {}
constructor(@Optional() @Inject(CHECK_OPTIONS) options? CheckOptions) {}
^^^^^^^^^^^
@Optional()裝飾器的資訊。
