View
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 |
reply