Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Joon's Space

[NestJS] NestJS API 만들기(controller, service) 본문

Web/NestJS

[NestJS] NestJS API 만들기(controller, service)

Happy Joon 2021. 7. 8. 16:29

NestJs 의 구조

기본적으로 프로젝트파일들을 생성했을 때, 가장 중요한 폴더 src를 살펴보면 controller, module, service, main 파일이 있다. 

 

nestjs 에서는 controller, service 의 파일코드들을 module 에서 관리하고, 이러한 모듈들을 main 파일에서 실행시키는 구조이다. 

 

<app.controller.ts>

import { Controller, Get, Post } from '@nestjs/common';
import { AppService } from './app.service';

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

  @Get()
  getHello(): string {
    return this.appService.getHello();
  }

  @Get('/hello')
  sayHello(): string {
    return this.appService.getHi();
  }
}

 

<app.service.ts>

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

@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello Nest!';
  }
  getHi(): string {
    return 'Hi Nest';
  }
}

 

<app.module.ts>

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

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

 

<main.ts>

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

 

controller : url 가져오고, 함수를 실행하는 역할 (router 같은 존재)

 

컨트롤러의 데코레이터(@Get, @Post, etc 같은것)는 꾸며주는 함수나 클래스랑 붙어서 작성해야함 

 

express.js 의 controller/router 같은것 (express.js 에서는 라우터에서 app.get 으로 쓰고 함수를 사용)

 

그치만 여기서 왜 컨트룰러에서 원하는 값을 return 하면 되는데, service를 사용하는 이유는 무엇일까? 

 

service 에서는 비즈니스 로직을 작성하기 때문에, 실제로 function을 가지는 부분을 여기서 작성한다. (ex. 위 AppService class 안의 getHello함수)

 

반응형