2. nest 구조 - controller, provider
nest의 구조는 express와 비슷하다.
- controller
- service(provider)
- dto
- ...
controller - HTTP 요청을 처리해서 응답하는 역할을 하는 클래스, service에서 실제 로직을 처리한다.
// hello.controller.ts
import { Controller, Get, Param, Logger } from '@nestjs/common';
import { HelloService } from './hello.service';
@Controller('hello')
export class HelloController {
constructor(private readonly helloService: HelloService) {}
logger: Logger = new Logger(HelloController.name);
@Get()
async showing(): Promise<string> {
try {
return this.helloService.showing();
} catch (error) {
this.logger.error(error?.message ?? '');
throw error;
}
}
@Get('/:content')
async reShowing(@Param('content') content: string): Promise<string> {
try {
return this.helloService.reShowing(content);
} catch (error) {
this.logger.error(error?.message ?? '');
}
}
}
controller임을 명시해주는 @Controller() annotation
.
이 안에 있는 'hello'
는 라우팅을 뜻한다.
즉, localhost:30000/hello
이다.
생성자로 helloService
를 주입받는다. 이를 DI라고 하는데, 나중에 다시 확인하자.
또한 에러 처리를 위해 nest안의 logger를 가져와서 사용할 수 있다.
이 처럼 express 와는 다르게, 정해진 룰들이 있는 것 같다.
@Get() annotation
을 통해 http method get 함수를 사용함을 알 수 있고, 파라미터 값을 함께 추가할 수 있다.
이처럼 controller는 실제 로직을 구현하지 않고, 클라이언트로 부터 받은 요청을 service에서 처리해서 응답하는 기능을 가지고 있다.
service - controller의 응답의 구체적인 로직
import { Injectable } from '@nestjs/common';
@Injectable()
export class HelloService {
async showing(): Promise<string> {
return 'here is for hello page';
}
async reShowing(content: string): Promise<string> {
return `${content} is re showing !!!`;
}
}
service(provider)임을 알 수 있게, @Injectable annotation
를 명시해준다.
이는 종속성을 주입할 수 있는 클래스 입니다 - provider
라는 의미를 가진다.
promise 객체를 반환하는 비동기 처리를 통하여 실제로 클라이언트에게 보내는 값을 반환한다.
provider
provider은 대부분의 로직을 처리한다.
- 사용자 인증: Guards
- 클라이언트가 보내는 데이터 필터링: Pipes
- 비즈니스 로직: Service or Handler
- 예외처리: Exception Filters
- Porvider 처리 과정 중 위에 해당하지 않는 무언가를 하고 싶을 때: Interceptor
- 미들웨어: Express의 Middleware와 동일
미들웨어를 거친 후, 사용자가 접근가능한 사용자인지 확인한다.(Guards)
이후 Pipes에서 클라이언트가 보낸 데이터를 가공한다. 예를 들어, string -> number (Pipes)
이후 해당 데이터에 대한 비즈니스 로직을 실행한다. (Handler, serivce)
예외 처리를 한다. (Exception Filters)
Author And Source
이 문제에 관하여(2. nest 구조 - controller, provider), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jaymee/2.-nest-구조-controller-service저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)