【发布时间】: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')
不知道我错过了什么
【问题讨论】:
-
如果您的
FeatureFlagServiceREQUEST作用域? -
@JayMcDoniel 不确定,应该类似于 Nestjs 网站上的角色示例
-
@JayMcDoniel 功能标志服务将下载一个 json 文件,然后读取该文件并检查标志是真还是假(尚未实现)
-
@JayMcDoniel 我从构造函数中删除了 featureFlagService 并且反射器被正确注入