反射器未注入我在 nestjs 中的自定义守卫

Reflector not injected to my custom guard in nestjs

我在单独的模块中创建了一个守卫,用于检查功能标志,如下所示

@Injectable()
export class FeatureFlagGuard implements CanActivate {
    constructor(
        private reflector: Reflector,
        private featureFlagService: FeatureFlagService
    ) {}

    async canActivate(context: ExecutionContext): Promise<boolean> {
        const featureKey = this.reflector.get<string>(
            FEATURE_FLAG_DECORATOR_KEY,
            context.getHandler()
        );

        if (!featureKey) {
            return true;
        }
        return await this.featureFlagService.isFeatureEnabled(featureKey);
    }
}

这是我的装饰器

import { SetMetadata } from '@nestjs/common';

export const FEATURE_FLAG_DECORATOR_KEY = 'FEATURE_FLAG';
export const FeatureEnabled = (featureName: string) =>
    SetMetadata(FEATURE_FLAG_DECORATOR_KEY, featureName);

然后在 appModule 中我提供了如下的 FeatureFlagGuard

    providers: [
        {
            provide: APP_GUARD,
            useClass: FeatureFlagGuard
        }
    ]

然后在我的控制器中

    @FeatureEnabled('FEATURE1')
    @Get('/check-feature-flag')
    checkFeatureFlag() {
        return {
            date: new Date().toISOString()
        };
    }

当我 运行 代码时出现此错误,因为 reflector 被作为 null 注入到我的服务中

[error] [ExceptionsHandler] Cannot read properties of undefined (reading 'get')

不确定我错过了什么

感谢@jayMcDoniel 给我线索

问题是 FeatureFlagService 没有从模块中导出。当我导出它时,问题就解决了