728x90

우리만의 token module 만들기

 

nest g mo jwt

nest cli 로 jwt module 을 생성합니다.

 

static module 과 dynamic module

 

여기서 기억해둬야 할부분은 module 의 종류는 두가지가 존재하는데, 첫 번째는 'static module'입니다.

 

 

 

 

 

UserModule 같은 경우 어떠한 설정도 되어 있지 않습니다. 이게 바로 static module 입니다.

 

 

 

 

 

 

여기서 또 중요한 점은 .forRoot에 마우스를 올려보면 .forRoot는 Dynamic Module이라는 사실입니다.

Dynamic module 은 설정이 적용되어 있는 module 입니다 그게 다에요 !

 

Users module 에서 ConfigModule 을 ConfigService 로 불러 쓴 것처럼 jwt module을 static 에서 dynamic 하게 변경하여

 

jwtModule을 jwtService 로 import 하여 사용 하게끔 변경하겠습니다.

 

이걸 해보면 이제 module, service 그리고 nestjs 에서 다룬 부분들이 전부 연결되면서 이해 가 될거에요

 

 

여기서 꼭 알아둬야 할점!!
dynamic module 은 사실 결과적으로 static module이 된다는 겁니다

 

 

dynamic module 에서 static module 이 되는 순서

 

 

  1. 동적인 모듈 만들기
  2. 여러가지 옵션 설정 적용시키기
  3. 리턴 값으로 우리가 설정한 옵션들이 존재하는 상태의 정적인 모듈을 내보내

 

nest g mo Jwt
nest g s Jwt

 

 

Jwt service test 파일은 일단 지워주도록 할게요

JwtModule 에 forRoot를 사용하기 위하여 function 을 만듭니다

 

 

import { DynamicModule, Global, Module } from '@nestjs/common';
import { JwtService } from './jwt.service';

@Module({})
@Global()
export class JwtModule {
  // forRoot 말고 원하는대로 정해도 상관없지만 개발자들의 약속
  static forRoot(): DynamicModule {
    return {
      module: JwtModule,
      exports: [JwtService],
      providers: [JwtService],
    };
  }
}

 

 

다음 코드를 살펴보겠습니다.

module 에는 module 의 이름이 들어가면 됩니다.

exports 에는 JwtService 를 넣어주고 다른 모듈에서 import 하여 쓸수 있게끔 해줍니다. providers 에도 service 를 넣어줍니다.

Global 데코레이터는

 

 

 

 

ConfigModule 에 isGlobal: true 와 동일한 역활을 합니다.

isGlobal 이 true 인 경우

 

 

import { Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import { JwtService } from 'src/jwt/jwt.service';
import { User } from './entities/user.entity';
import { UsersResolver } from './users.resolver';
import { UsersService } from './users.service';

@Module({
  imports: [TypeOrmModule.forFeature([User]), ConfigService, JwtService],
  providers: [UsersService, UsersResolver],
})
export class UsersModule {}

 

 

 

imports 에 넣어 주지 않아도 에러가 발생하지 않습니다.

잘동작 하는지 확인하기 위해 jwt.service.ts 에 간단한 함수를 하나 만들어 테스트 하겠습니다.

 

 

 

import { Global, Injectable } from '@nestjs/common';

@Injectable()
export class JwtService {
  hello() {
    console.log('hello');
  }
}

 

 

 

그런 다음 users.service.ts 로 돌아와

 

 

 

...
@Injectable()
export class UsersService {
  constructor(
    @InjectRepository(User) private readonly users: Repository<User>,
    private readonly config: ConfigService,
    private readonly jwtService: JwtService,
  ) {
    this.jwtService.hello();
  }
...

 

 

 

코드를 수정한뒤 서버를 실행 시킵니다.

 

 

 

 

 

 

아직 환경설정에 관해서는 건들인게 없지만 정상적으로 잘 동작 합니다.

github

728x90

'Side > uber-eats' 카테고리의 다른 글

라이브러리 없이 만드는 JWT - 1  (0) 2021.06.06
Nestjs , Typeorm 에서 Hasing passwords  (0) 2021.06.05
Nestjs - User model  (0) 2021.06.01
Nestjs - Typeorm Repository 사용하기  (0) 2021.05.31
TypeORM setup 과 Nestjs Config  (0) 2021.05.23