본문 바로가기

내일배움캠프 노드 4기/Today I Learned

[Nest.js] 미들웨어 사용해보기

auth.middleware.ts 

....
@Injectable()
export class AuthMiddleware implements NestMiddleware {
  constructor(
    private readonly jwtService: JwtService,
    @Inject(CACHE_MANAGER) private readonly cacheManager: Cache,
  ) {}

  async use(req: any, res: any, next: (error?: any) => void) {
    const { accessToken, refreshToken } = req.cookies;
...

먼저 미들웨어를 작성합니다 // 프로젝트에서 사용한 인증 미들웨어

 

app.module.ts

import { AuthMiddleware } from './auth/auth.middleware';

미들웨어를 임포트 해줍니다

// 미들웨어를 작성하는 공간
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer.apply(AuthMiddleware) // 인증미들웨어 전역 적용
  }

configure() 메소드를 사용해 미들웨어를 설정해주는 공간을 만들어줍니다.

export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(AuthMiddleware)
      .exclude({ path: 'camps', method: RequestMethod.GET })
      );
  }

exclude() 메소드를 사용해 특정 경로를 제외할 수 있습니다.

예시로는 camps 경로의 모든 GET 메소드를 제외했습니다. POST, DELETE, PUT 등 다른 메소드도 가능합니다. 

ALL 메소드로 모든 메소드를 제외할 수도 있습니다.

export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(AuthMiddleware)
      .forRoutes(
        { path: 'auth/log-out', method: RequestMethod.POST },
        { path: 'auth/withdrawal', method: RequestMethod.DELETE },
        CampController,
        CouponController,
      );
  }

forRoutes() 메소드를 사용해 특정 경로를 지정할 수 있습니다.

사용방법은 exclude() 메소드와 같습니다.

여기서는 직접 경로 설정 이외에 컨트롤러 자체를 추가했습니다.

 

 

 

https://jakekwak.gitbook.io/nestjs/overview/untitled-2

'내일배움캠프 노드 4기 > Today I Learned' 카테고리의 다른 글

[Nest.js][TypeORM] 시드 만들기  (0) 2023.03.09
[Nest.js] lodash 모듈을 못 불러와요  (0) 2023.02.21
[Nest.js] DTO  (0) 2023.02.16
[Nest.js] 게시판 만들기  (0) 2023.02.15
[Nest.js] IoC와 DI  (0) 2023.02.10