Nest 无法解析 JwtService 的依赖关系
Nest can't resolve dependencies of the JwtService
我在这里创建了一些模块,但遇到错误
授权模块
import { Module } from "@nestjs/common";
import { AuthService } from "./auth.service";
import { LocalStrategy } from "./local.strategy";
import { JwtStrategy } from "./jwt.strategy";
import { UsersModule } from "../users/users.module";
import { PassportModule } from "@nestjs/passport";
import { JwtModule, JwtService } from "@nestjs/jwt";
import { jwtConstants } from "./constants";
import { ConfigModule, ConfigService } from "@nestjs/config";
@Module({
imports: [
UsersModule,
PassportModule,
JwtModule.register({
secret: jwtConstants.secret,
signOptions: { expiresIn: "1d" },
}),
],
providers: [AuthService, LocalStrategy, JwtStrategy],
exports: [AuthService, LocalStrategy, JwtStrategy],
})
export class AuthModule {}
电子邮件模块
import { Module } from "@nestjs/common";
import EmailService from "./email.service";
import { ConfigModule } from "@nestjs/config";
import { EmailConfirmationService } from "./emailConfirmation.service";
import { EmailConfirmationController } from "./emailConfirmation.controller";
import { EmailConfirmationGuard } from "./guards/emailConfirmation.guard";
import { AuthModule } from "src/auth/auth.module";
import { UsersModule } from "src/users/users.module";
@Module({
imports: [ConfigModule,AuthModule,UsersModule],
providers: [EmailService,EmailConfirmationService,EmailConfirmationGuard],
exports: [EmailConfirmationService,EmailConfirmationGuard],
controllers : [EmailConfirmationController]
})
export class EmailModule {}
用户模块
import { Module } from "@nestjs/common";
import { UsersService } from "./users.service";
import { UsersController } from "./users.controller";
import { MongooseModule } from "@nestjs/mongoose";
import { UserSchema } from "./entities/user.entity";
import { EmailModule } from "src/email/email.module";
@Module({
imports: [MongooseModule.forFeature([{ name: "User", schema: UserSchema }]),EmailModule],
providers: [UsersService],
exports: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
我遇到的错误
[Nest] 9200 - 09/26/2021, 3:43:15 PM ERROR [ExceptionHandler] Nest cannot create the EmailModule instance.
The module at index [1] of the EmailModule "imports" array is undefined.
Potential causes:
- A circular dependency between modules. Use forwardRef() to avoid it. Read more: https://docs.nestjs.com/fundamentals/circular-dependency
- The module at index [1] is of type "undefined". Check your import statements and the type of the module.
Scope [AppModule -> AuthModule -> UsersModule]
Error: Nest cannot create the EmailModule instance.
The module at index [1] of the EmailModule "imports" array is undefined.
Potential causes:
- A circular dependency between modules. Use forwardRef() to avoid it. Read more: https://docs.nestjs.com/fundamentals/circular-dependency
- The module at index [1] is of type "undefined". Check your import statements and the type of the module.
我错过了什么?
EmailConfirmationService is used in UsersController
UserService is used in EmailConfirmationService
您的导入中列出了 JwtService
。导入仅适用于模块。
同时分享 JwtService
中的代码,以便我们确保没有其他问题。
更新:
如果 EmailModule
想要使用来自 AuthModule
的导出(在本例中为 JwtService),它必须将 AuthModule
添加到它的导入数组中。
这是 DI 系统的整个前提,模块通过将它们打算共享的东西放在 exports
数组中来在彼此之间共享东西。之后,任何模块都可以将 Source 模块添加到其 imports
数组中,以访问源导出的内容。错误消息字面上为您拼写出来:
If JwtService is exported from a separate @Module, is that module imported within EmailModule? @Module({ imports: [ /* the Module containing JwtService */ ] })
为了在你的 UserController 中使用 EmailService 并且在 EmailConfirmationService 中使用 UserService 那么你必须在 UserModule 中做这样的事情:
imports: [forwardRef(() => EmailModule)]
在 EmailModule 内部为 UserModule 做同样的事情:
imports: [forwardRef(() => UserModule)]
其余的导入应该没有 forwardRef(()=>)
您可以在此处阅读有关循环依赖的更多信息https://docs.nestjs.com/fundamentals/circular-dependency
确保 tsconfig.json
中的目标是 es6。
我在这里创建了一些模块,但遇到错误
授权模块
import { Module } from "@nestjs/common";
import { AuthService } from "./auth.service";
import { LocalStrategy } from "./local.strategy";
import { JwtStrategy } from "./jwt.strategy";
import { UsersModule } from "../users/users.module";
import { PassportModule } from "@nestjs/passport";
import { JwtModule, JwtService } from "@nestjs/jwt";
import { jwtConstants } from "./constants";
import { ConfigModule, ConfigService } from "@nestjs/config";
@Module({
imports: [
UsersModule,
PassportModule,
JwtModule.register({
secret: jwtConstants.secret,
signOptions: { expiresIn: "1d" },
}),
],
providers: [AuthService, LocalStrategy, JwtStrategy],
exports: [AuthService, LocalStrategy, JwtStrategy],
})
export class AuthModule {}
电子邮件模块
import { Module } from "@nestjs/common";
import EmailService from "./email.service";
import { ConfigModule } from "@nestjs/config";
import { EmailConfirmationService } from "./emailConfirmation.service";
import { EmailConfirmationController } from "./emailConfirmation.controller";
import { EmailConfirmationGuard } from "./guards/emailConfirmation.guard";
import { AuthModule } from "src/auth/auth.module";
import { UsersModule } from "src/users/users.module";
@Module({
imports: [ConfigModule,AuthModule,UsersModule],
providers: [EmailService,EmailConfirmationService,EmailConfirmationGuard],
exports: [EmailConfirmationService,EmailConfirmationGuard],
controllers : [EmailConfirmationController]
})
export class EmailModule {}
用户模块
import { Module } from "@nestjs/common";
import { UsersService } from "./users.service";
import { UsersController } from "./users.controller";
import { MongooseModule } from "@nestjs/mongoose";
import { UserSchema } from "./entities/user.entity";
import { EmailModule } from "src/email/email.module";
@Module({
imports: [MongooseModule.forFeature([{ name: "User", schema: UserSchema }]),EmailModule],
providers: [UsersService],
exports: [UsersService],
controllers: [UsersController],
})
export class UsersModule {}
我遇到的错误
[Nest] 9200 - 09/26/2021, 3:43:15 PM ERROR [ExceptionHandler] Nest cannot create the EmailModule instance.
The module at index [1] of the EmailModule "imports" array is undefined.
Potential causes:
- A circular dependency between modules. Use forwardRef() to avoid it. Read more: https://docs.nestjs.com/fundamentals/circular-dependency
- The module at index [1] is of type "undefined". Check your import statements and the type of the module.
Scope [AppModule -> AuthModule -> UsersModule]
Error: Nest cannot create the EmailModule instance.
The module at index [1] of the EmailModule "imports" array is undefined.
Potential causes:
- A circular dependency between modules. Use forwardRef() to avoid it. Read more: https://docs.nestjs.com/fundamentals/circular-dependency
- The module at index [1] is of type "undefined". Check your import statements and the type of the module.
我错过了什么?
EmailConfirmationService is used in UsersController
UserService is used in EmailConfirmationService
您的导入中列出了 JwtService
。导入仅适用于模块。
同时分享 JwtService
中的代码,以便我们确保没有其他问题。
更新:
如果 EmailModule
想要使用来自 AuthModule
的导出(在本例中为 JwtService),它必须将 AuthModule
添加到它的导入数组中。
这是 DI 系统的整个前提,模块通过将它们打算共享的东西放在 exports
数组中来在彼此之间共享东西。之后,任何模块都可以将 Source 模块添加到其 imports
数组中,以访问源导出的内容。错误消息字面上为您拼写出来:
If JwtService is exported from a separate @Module, is that module imported within EmailModule? @Module({ imports: [ /* the Module containing JwtService */ ] })
为了在你的 UserController 中使用 EmailService 并且在 EmailConfirmationService 中使用 UserService 那么你必须在 UserModule 中做这样的事情:
imports: [forwardRef(() => EmailModule)]
在 EmailModule 内部为 UserModule 做同样的事情:
imports: [forwardRef(() => UserModule)]
其余的导入应该没有 forwardRef(()=>)
您可以在此处阅读有关循环依赖的更多信息https://docs.nestjs.com/fundamentals/circular-dependency
确保 tsconfig.json
中的目标是 es6。