View

TIL | NestJS_REST_API_Module

Melody:) 2021. 10. 11. 19:32

Module

1. app.Module생성

$ nest g mo
import { Module } from '@nestjs/common';
import { MoviesModule } from './movies/movies.module';
import { AppController } from './app.controller';

//앱을 만들 때 모듈로 분리하면 좋다. 기존에 있던 MovieService와 MovieController를 따로 movies.module.ts를 생성하여, 넣어주었다.
@Module({
  imports: [MoviesModule],
  controllers: [AppController],
  providers: [],
})
export class AppModule {}

2. movie.Module 수정

import { Module } from '@nestjs/common';
import { MoviesController } from './movies.controller';
import { MoviesService } from './movies.service';

@Module({
    controllers : [MoviesController],
    providers   : [MoviesService]
})

export class MoviesModule {}
-

3. main.ts

main.ts의 AppModule이 실행되면서, AppModule에 import된 다른 app들의 module이 함께 실행된다.
모듈을 통해 앱들을 구조적으로 관리가능하게 되었다.

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { triggerAsyncId } from 'async_hooks';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
    app.useGlobalPipes(new ValidationPipe({
      whitelist : true,
      forbidNonWhitelisted : true,
      transform: true
    })
  );
  await app.listen(3000);
}
bootstrap();

Dependency injection(의존성 주입)

movies.module.ts

import { Module } from '@nestjs/common';
import { MoviesController } from './movies.controller';
import { MoviesService } from './movies.service';

@Module({
    controllers : [MoviesController],
    providers   : [MoviesService]
})


export class MoviesModule {}
  • NestJS는 MovieService를 자동으로 import하고 MoviesController에 inject(주입)해주는 역할을 한다.

  • 그렇기 떄문에 아래 코드와 같이 moviesService를 임폴트하지않고 단순히, 타입을 선언해주는 것만으로도 MoviesController에서 moviesService의 사용이 가능하다.

import { Body, Controller, Delete, Get, Param, Patch, Post, Put, Query } from '@nestjs/common';
import { CreateMovieDto } from './dto/create-movie.dto';
import { UpdateMovieDto } from './dto/update-movie.dto';
import { Movie } from './entities/movie.entity';
import { MoviesService } from './movies.service';

@Controller('movies')
export class MoviesController {

    constructor(private readonly moviesService: MoviesService) {}

    @Get()
    getAll(): Movie[] {
        return this.moviesService.getAll();
    }
.
.
.
생략

참고로 MoviesService 클래스 위에 @Injectable()이라는 데코레이터를 볼 수 있다.

import { Injectable, Delete, NotFoundException } from '@nestjs/common';
import { CreateMovieDto } from './dto/create-movie.dto';
import { UpdateMovieDto } from './dto/update-movie.dto';
import { Movie } from './entities/movie.entity';

@Injectable()
export class MoviesService {
    private movies: Movie[] = [];

    getAll(): Movie[] {
        return this.movies;
    }
.
.
.
생략

movies.module.ts안에 provider인 MoviesService이 없다면, error가 뜨게된다.
이것이 바로 의존성 주입!!

'NestJS' 카테고리의 다른 글

TIL | 데이터 베이스에 데이터를 저장  (0) 2021.10.18
TIL | NestJS_URI_parameter_받아오기  (0) 2021.10.17
TIL | NestJS_REST_API_Validation  (0) 2021.10.11
TIL | NestJS_REST_API_Service  (0) 2021.10.11
TIL | NestJS_REST_API_Controller  (0) 2021.10.11
Share Link
reply
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31