TIL nest

송은우·2022년 3월 16일
0

module : provider라고 하는 공유되는 인스턴스가 돌아다닐 수 있는 하나의 구조체.

캡슐화의 단위는 항상 provider이다. 모듈의 provider에 등록됮 않았거나, import한 모듈에서 export하지 않았거나 한 것을 inject할 수 없다.
root module 에다 추가하는 경우에는 nest g module name으로 쓸 수 있다.

module은 항상 "자기가" 가지고 있는 provider를 export할 수 있다. 그리고, imporpt한 모듈 그대로 export할 수 있다.

module 클래스에서도 provider를 config목적이나 여러 목적으로 넣을 수 있다. 단 모듈 클래스 자체를 넣을 수는 없다.

@Global()을 통해서 우리는 언제나 import 가능한 것을 만들어 낼 수 있다.
Dynamic modules라는 방식으로 동적으로 provider를 등록, 구성할 수 있다.

필요로 하는 다른 모듈들을 imports 배열에 넣고, 모듈에 포함되는 프로바이더는 providers 배열에 넣어주고, 프로바이더/import 해온 중에 export 할 친구들은 exports에 넣고
출처

Middleware
아무 코드나 실행가능
요청/응답 객체를 변경가능
요청-응답 사이클을 끝낼 수 있다
스택에 있는 다음 미들웨어 함수를 호출할 수 있다
현재의 미들웨어 함수가 요청-응답 사이클을 끝내지 않으면 반드시 next()를 호출해서 다음 미들웨어 함수에게 통제권을 넘겨야함

nest 의 middleware는 @injectable() 데코레이터와 함께 클래스에서 구현한다.
apply middleware 은 조금 특이한 방법으로 해야 한다. @module 안에 넣는 것이 아님

app.module.tsJS

import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import { LoggerMiddleware } from './common/middleware/logger.middleware';
import { CatsModule } from './cats/cats.module';

@Module({
  imports: [CatsModule],
})
export class AppModule implements NestModule {
  configure(consumer: MiddlewareConsumer) {
    consumer
      .apply(LoggerMiddleware)
      .forRoutes('cats');
      //.forRoutes({ path: 'cats', method: RequestMethod.GET });
  }
}

middleware consumer 는 헬퍼 클래스.
헬퍼 클래스 : utility class와 유사하지만, 모든 메서드가 정적 매서드일 이유는 없고, 인스턴스가 생길 수도 있다는 차이가 있음.
built-in : 내장되어 있는
출처

profile
학생의 마음가짐으로 최선을 다하자

0개의 댓글