我正在使用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,
},
});
}
}
谢谢你的帮助:)
1条答案
按热度按时间sdnqo3pr1#
这很可能与
AuthorizerGuard
中AuthorizerService
的导入方式有关,如果使用impot type
而不是常规的import
,则类AuthorizerService
实际上不会成为typescript发出的元数据,而只剩下Object
或{}
。Nest无法读取AuthorizerGuard
的构造函数参数的元数据,并抛出错误。