【发布时间】:2022-01-19 17:50:58
【问题描述】:
[Nest] 20308 - 16.12.2021, 17:08:50 错误 [ExceptionHandler] Nest 无法解析 AuthGuard (?, AuthService, 反射器)。请确保索引处的参数 UserService [0] 在 AppModule 上下文中可用。
可能的解决方案:
- 如果 UserService 是提供者,它是当前 AppModule 的一部分吗?
- 如果 UserService 是从单独的 @Module 导出的,那么该模块是否会导入到 AppModule 中? @模块({ 导入:[ /* 包含 UserService 的模块 */ ] })
身份验证模块
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { JsonWebToken } from 'src/auth/jsonwebtoken';
import { UserModule } from 'src/user/user.module';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { Code, CodeSchema } from './db/code.schema';
@Module({
imports: [
UserModule,
MongooseModule.forFeature([{name: Code.name, schema: CodeSchema}]),
],
controllers: [AuthController],
providers: [AuthService, JsonWebToken],
exports: [AuthService]
})
export class AuthModule {}
用户模块
import { Module } from '@nestjs/common';
import { UserService } from './user.service';
import { UserController } from './user.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { User, UserSchema } from './db/user.schema';
import { UserSettingsService } from './settings.service';
import { UserSettings, UserSettingsSchema } from './db/settings.schema';
@Module({
imports: [
MongooseModule.forFeature([{name: User.name, schema: UserSchema}]),
MongooseModule.forFeature([{name: UserSettings.name, schema: UserSettingsSchema}]),
],
providers: [UserService, UserSettingsService],
controllers: [UserController],
exports: [UserService, UserSettingsService]
})
export class UserModule {}
应用模块
import { Module } from '@nestjs/common';
import { UserModule } from './user/user.module';
import { MongooseModule } from '@nestjs/mongoose';
import { AuthModule } from './auth/auth.module';
import { ConfigModule } from '@nestjs/config';
import { ServicesModule } from './services/services.module';
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost:27017/user-service'),
UserModule,
AuthModule,
ConfigModule.forRoot(),
ServicesModule,
],
providers: [],
})
export class AppModule {}
守卫
import { CanActivate, ExecutionContext, Inject, Injectable } from '@nestjs/common';
import { Observable } from 'rxjs';
import { UserService } from 'src/user/user.service';
import { Request } from 'express';
import { AuthService } from 'src/auth/auth.service';
import { Reflector } from '@nestjs/core';
@Injectable()
export class AuthGuard implements CanActivate {
constructor(
@Inject('UserService') private userService: UserService,
@Inject('AuthService') private authService: AuthService,
private reflector: Reflector
) {}
canActivate(
context: ExecutionContext,
): boolean | Promise<boolean> | Observable<boolean> {
//some code....
//passed
return true;
}
}
我只想将 AuthService 和 UserService 注入 AuthGuard 但我总是遇到同样的错误。我也搜索了问题,但没有找到任何解决问题的方法。
很高兴得到您的帮助,非常感谢!
【问题讨论】:
-
我相信你可以放弃那些
@Inject('UserService')和@Inject('AuthService'),你不需要它们,因为你使用具体类作为类型。另外,您使用的是哪个版本的 Nestjs? -
btw
AuthGuard用于哪个nestjs模块?因为目标模块应该已经导入UserModule,我猜 -
哦,是的。我通过创建模块前向引用解决了这个问题。
AuthGuard中需要AuthModule和UserModule这两个模块。所以就像将模块导入另一个模块一样。 -
不过感谢您的帮助!
标签: typescript dependency-injection nestjs