0

@nestjs/jwt在我的 NestJS 项目中使用。

我有两个模块,AuthModuleAppModule.

  • AuthModule用途@nestjs/jwt
  • 来自的AppModule调用身份验证服务AuthModule

AuthService

import { Injectable } from '@nestjs/common';
import { JwtService } from '@nestjs/jwt';
import { ForbiddenException } from '@nestjs/common';

@Injectable()
export class AuthService {
  constructor(private readonly jwt: JwtService) {}

  async validate(token: string) {
    return this.jwt.verify(token);
  }
   ...
}

授权模块:

import { Module } from '@nestjs/common'
import { TokenService } from './auth.service'
import { ConfigModule, ConfigService } from '@nestjs/config'
import { JwtModule } from '@nestjs/jwt'

@Module({
  imports: [
    JwtModule.register({
          secret: "mysecret",
          signOptions: { expiresIn: "60s" },
        }),
  ],
  // I provide AuthService & JwtService
  providers: [AuthService, JwtService], 
  // I export AuthService and JwtService
  exports: [AuthService, JwtService],
})
export class AuthModule {}

应用模块:

@Module({
  imports: [
    AuthModule,
    ...
  ],
  controllers: [AppController],
  // I provide AuthService & JwtService also in AppModule
  providers: [AppService, JwtService],
})
export class AppModule {}

(用于验证令牌的AppController调用实例。)AuthService

我经常收到错误:

Nest can't resolve dependencies of the JwtService (?). Please make sure that the argument JWT_MODULE_OPTIONS at index [0]

这是为什么?我想念哪里?

4

1 回答 1

0

您无需添加JwtServiceproviders. Nest 将查看当前模块providers,然后是导入的模块exports,然后是全局模块exports,以查找不在它正在解析提供程序的级别中的提供程序。这意味着AuthService它会查找JwtModule'sexports并找到JwtService已经创建,并使用该实例。然后在AppModule你不需要提及AuthServiceor JwtService,只需导入AuthModule导出AuthServiceand JwtModule(做一些模块重新导出),你应该很高兴


编辑:添加模块代码:

授权模块

import { Module } from '@nestjs/common'
import { TokenService } from './auth.service'
import { ConfigModule, ConfigService } from '@nestjs/config'
import { JwtModule } from '@nestjs/jwt'

@Module({
  imports: [
    JwtModule.register({
          secret: "mysecret",
          signOptions: { expiresIn: "60s" },
        }),
  ],
  providers: [AuthService],
  exports: [AuthService, JwtModule],
})
export class AuthModule {}

应用模块

@Module({
  imports: [
    AuthModule,
    ...
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
于 2021-11-30T15:58:54.823 回答