typescript 如何正确地将服务注入到防护中

tvmytwxo  于 2022-12-19  发布在  TypeScript
关注(0)|答案(1)|浏览(135)

我正在使用nestjs开发一个API,但在guard中的服务注入出现了问题。发生了以下错误:

错误:Nest无法解析AuthorizerGuard(?)的依赖项。请确保索引[0]处的参数Object在PostsModule上下文中可用。

我查阅了几篇与这个主题相关的帖子,但没有一个解决方案有效,我不知道该怎么做(我是nestjs的新手)。
当前我的文件:

  • 授权人.模块.ts*
@Module({
  providers: [AuthorizerService],
  exports: [AuthorizerService],
})
export class AuthorizerModule {}
  • 授权人.guard.ts*
import {
  CanActivate,
  ExecutionContext,
  Inject,
  Injectable,
  Logger,
  UnauthorizedException,
} from '@nestjs/common';

@Injectable()
export class AuthorizerGuard implements CanActivate {
  constructor(private readonly AuthorizerService) {}
  async canActivate(context: ExecutionContext): Promise<boolean> {
    //my code
  }
}
  • 职位.模块.ts*
@Module({
  imports: [AuthorizerModule],
  controllers: [PostsController],
  providers: [PostsService],
})
export class PostsModule {}
  • 员额.控制员.ts*
@UseGuards(AuthorizerGuard)
export class PostsController {}
  • 授权人.服务.ts*
@Injectable()
export class AuthorizerService {
  prisma = new PrismaClient();

  async findUseridByEmail(email: string) {
    return await this.prisma.user.findUnique({
      where: {
        email,
      },
    });
  }
}

谢谢你的帮助:)

sdnqo3pr

sdnqo3pr1#

这很可能与AuthorizerGuardAuthorizerService的导入方式有关,如果使用impot type而不是常规的import,则类AuthorizerService实际上不会成为typescript发出的元数据,而只剩下Object{}。Nest无法读取AuthorizerGuard的构造函数参数的元数据,并抛出错误。

相关问题