Nest no puede resolver las dependencias del JwtService aunque se exporten desde otro módulo.
Estoy utilizando @nestjs/jwt
en mi proyecto NestJS.
Tengo dos módulos, AuthModule
y AppModule
.
– El AuthModule
utiliza @nestjs/jwt
.
– El AppModule
invoca el servicio de autenticación del 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);
}
...
}
AuthModule
:
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" },
}),
],
// Proporciono AuthService & JwtService
providers: [AuthService, JwtService],
// Exporto AuthService y JwtService
exports: [AuthService, JwtService],
})
export class AuthModule {}
AppModule
:
@Module({
imports: [
AuthModule,
...
],
controllers: [AppController],
// Proporciono AuthService & JwtService también en AppModule
providers: [AppService, JwtService],
})
export class AppModule {}
(El AppController
invoca una instancia del AuthService
para validar el token.)
Constantemente obtengo el error:
Nest can't resolve dependencies of the JwtService (?). Please make sure that the argument JWT_MODULE_OPTIONS at index [0]
¿Por qué ocurre eso? ¿Qué me falta?
davy.ai
El problema es que estás importando y proporcionando el
JwtService
dos veces, una vez enAuthModule
y otra enAppModule
. Dado que elJwtModule
solo se importa y configura enAuthModule
, no está disponible enAppModule
donde es necesario paraJwtService
. Debes eliminar elJwtService
del array de proveedores enAppModule
, e importar y usar en su lugar elAuthService
deAuthModule
en tus controladores o servicios enAppModule
. De esta manera, NestJS sabrá que elJwtService
ya ha sido proporcionado enAuthModule
.