Как я могу использовать configService в super ()?

У меня вопрос о настройке переменных окружения.

В официальном документе говорится об использовании ConfigModule в этом случае, но мой случай - исключительный случай.

Потому что я хотел бы использовать его в super() в конструкторе.

Мой код ниже.

Есть какое-то решение в этом случае?

Если вам нужна дополнительная информация, дайте мне знать.

Спасибо за вашу поддержку!!

// jwt.strategy.ts

import { UnauthorizedException } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { PassportStrategy } from '@nestjs/passport';
import { InjectRepository } from '@nestjs/typeorm';
import { Strategy, ExtractJwt } from 'passport-jwt';
import { JwtPayload } from './jwt-payload.interface';
import { UserRepository } from './user.repository';
export class JwtStrategy extends PassportStrategy(Strategy) {
    constructor(
        @InjectRepository(UserRepository)
        private userRepository: UserRepository,
        private configService: ConfigService,
    ) {
        super({
            jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
            secretOrKey: configService.get('JWT_TOKEN'),
        });
    }

    async validate(payload: JwtPayload) {
        const { username } = payload;
        const user = await this.userRepository.findOne({ username });

        if (!user) {
            throw new UnauthorizedException();
        }
        return user;
    }
}

3 ответа

Я также хотел бы отметить, что, поскольку вы не используете нигде, кроме super()называть использование privateключевое слово перед ним избыточно

Вы можете попробовать использовать this.configService.get('JWT_TOKEN')а на вас просто наорет, что вы не позвонили супер

Удаление частного ключевого слова просто позволит избежать configServiceкак переменную класса и просто рассматривать ее как некоторую переданную ей опцию

Для тебя Strategy ты скучаешь по @Injectable() который сообщает Nest, что ему необходимо внедрить зависимости, определенные в конструкторе.

Вам необходимо импортировать configModule в свой класс модуля, чтобы configService работал. Также добавьте @Injectable() прямо над именем класса, чтобы указать, что это провайдер.

Вот как вы импортируете модуль.

//auth.module.ts    
    
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { JwtStrategy } from './jwt.strategy';

@Module({
  imports: [ConfigModule],
  provider:[JwtStrategy]
})
export class AuthModule {}

NestJs разрешает зависимости между ними.

см. https://docs.nestjs.com/techniques/configuration#using-the-configservice

Другие вопросы по тегам