反射器未注入我在 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
没有从模块中导出。当我导出它时,问题就解决了
我在单独的模块中创建了一个守卫,用于检查功能标志,如下所示
@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
没有从模块中导出。当我导出它时,问题就解决了