네스트 인강 핵심 내용들 문서화
main > module > controller > services
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할수있음
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
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 {
}
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';
}
인터셉터는 컨트롤러 앞에 실행되는것, 뒤에 실행되는것이 있음
컨트롤러에서 데이터를 받아서 가공해서 던져주는 역할을 보통 수행
컨트롤러 앞에 실행하여 로깅도 가능하지만 보통 미들웨어에서 처리하기때문에 크게 필요없음