【问题标题】:Reflector not injected to my custom guard in nestjs反射器未注入到我在nestjs中的自定义防护
【发布时间】:2022-02-09 06:14:12
【问题描述】:

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

@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')

不知道我错过了什么

【问题讨论】:

  • 如果您的FeatureFlagService REQUEST 作用域?
  • @JayMcDoniel 不确定,应该类似于 Nestjs 网站上的角色示例
  • @JayMcDoniel 功能标志服务将下载一个 json 文件,然后读取该文件并检查标志是真还是假(尚未实现)
  • @JayMcDoniel 我从构造函数中删除了 featureFlagService 并且反射器被正确注入

标签: node.js nestjs


【解决方案1】:

感谢@jayMcDoniel 提供线索

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

【讨论】:

    猜你喜欢
    • 2019-03-05
    • 2022-07-25
    • 2021-04-11
    • 2021-09-02
    • 1970-01-01
    • 2021-10-01
    • 2022-08-13
    • 2018-10-11
    • 2020-06-30
    相关资源
    最近更新 更多