[Nestjs] 공부

김영진·2021년 12월 13일
0

nest

목록 보기
1/1

목적

네스트 인강 핵심 내용들 문서화

내용

Nest Flow

main > module > controller > services

Controller
import {Body, Controller, Get, Param, Req} from '@nestjs/common';
import {AppService} from './app.service';
import {Request} from "express";

@Controller('cats')
export class AppController {
    constructor(private readonly appService: AppService) {
    }

    @Get('hello/:id/:name')
    getHello(@Req() req: Request, @Body() Body, @Param() param: { id: string; name: string }): string {
        console.log(req);
        console.log(Body);
        console.log(param);
        return this.appService.getHello();
    }
}
Provider & DI

의존성주입, Provider를 이용하여 서비스, 레포지토리, 팩토리, 도우미, 대부분의 클래스를 DI할수있음

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
Modules & 캡슐화
모듈 생성하기

자동으로 등록

Cli 명령어

CatModule에 Controller, Services 주입함

컨트롤러 라우팅
import {Controller, Delete, Get, Patch, Post, Put} from '@nestjs/common';
import {CatsService} from "./cats.service";

('cats')
export class CatsController {
    constructor(private readonly catsService: CatsService) {
    }

    ()
    getAllCat() {
        return 'all cat';
    }

    (':id')
    getOneCat() {
        return 'one cat';
    }

    ()
    createCat() {
        return 'create cat';
    }

    ()
    putCat() {
        return 'update cat';
    }

    (':id')
    updatePartialCat() {
        return 'update partial cat';
    }

    (':id')
    deleteCat() {
        return 'delete services';
    }

}
캡슐화

모듈을 기본적으로 캡슐화 됩니다.
상위 모듈에서 사용하려면 export 해주어야 합니다.

+a)
AppController에서 CatsServices를 사용하고 싶다면


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

@Injectable()
export class CatsService {
    hiCatServiceProduct() {
        return 'hello cat';
    }
}

서비스를 작성해 줍니다.

AppModule에서 서비스를 주입하면 사용가능합니다.

import {Module} from '@nestjs/common';
import {AppController} from './app.controller';
import {AppService} from './app.service';
import {CatsModule} from './cats/cats.module';
import {UsersModule} from './users/users.module';
import {CatsService} from "./cats/cats.service";

@Module({
    imports: [CatsModule, UsersModule],
    controllers: [AppController],
    providers: [AppService, CatsService],
})
export class AppModule {
}

but

AppModules에 Services, Repositroy, Gateway etc.. 를 직접 주입하는것은 안티패턴

CatModules에서 서비스를 export 해서 은닉화를 풀어주는 방향으로 서비스를 사용할수 있게 합니다.

import {Module} from '@nestjs/common';
import {CatsController} from './cats.controller';
import {CatsService} from './cats.service';

@Module({
    controllers: [CatsController],
    providers: [CatsService],
    exports: [CatsService],
})
export class CatsModule {
}
interceptor
인터셉터 작성
import {Injectable, NestInterceptor, ExecutionContext, CallHandler} from '@nestjs/common';
import {Observable} from 'rxjs';
import {tap} from 'rxjs/operators';

@Injectable()
export class SuccessInterceptor implements NestInterceptor {
    intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
        console.log('Before...');

        const now = Date.now();
        return next
            .handle()
            .pipe(
                tap(() => console.log(`After... ${Date.now() - now}ms`)),
            );
    }
}
인터셉터 의존성 주입

@Controller('cats')
@UseInterceptors(SuccessInterceptor)// 이부분
@UseFilters(HttpExceptionFilter)
export class CatsController {
    constructor(private readonly catsService: CatsService) {
    }

    @Get()
    getAllCat() {
        return 'all cat';
    }
인터셉터의 역할

인터셉터는 컨트롤러 앞에 실행되는것, 뒤에 실행되는것이 있음
컨트롤러에서 데이터를 받아서 가공해서 던져주는 역할을 보통 수행
컨트롤러 앞에 실행하여 로깅도 가능하지만 보통 미들웨어에서 처리하기때문에 크게 필요없음

profile
2021.05.03) Flutter, BlockChain, Sports, StartUp

0개의 댓글