NestJS 기본구조

emily,h·2022년 7월 9일
0

main.ts

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
/*
  nestjs는 main.ts파일을 가진다.(무조건 이 이름이어야함)
  NestFactory.create(AppModule)을 호출하고
  앱은 3000포트를 리스닝 하고있음. 앱은 여기서 시작한다.
*/
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  await app.listen(3000);
}
bootstrap();

app.module.ts

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
/*
  루트모듈같은 앱모듈 부분
  여기서 모든 import를 한다. (restaurants api, 인증서비스등을 만든다면 이 페이지에서 써야함)
*/

/* 
  데코레이터라고 불리는 함수다. 
  nestjs 사용하면 이 함수에 익숙해져야한다.
  데코레이터는 클래스에 함수 기능을 추가할 수 있다.
  그냥 클래스 위의 함수이고 클래스를 위해 움직인다고 생각하면 된다.
*/
@Module({
  imports: [],
  controllers: [AppController],
  providers: [AppService],
})

export class AppModule {}

app.controller.ts

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
/*
  컨트롤러는 express에서 controller/router와 같음.
  기본적으로 url을 가져오고 함수를 실행한다.
  따로 라우터를 설정할 필요없이 자동으로 해줌 
*/
@Controller()
export class AppController {
  constructor(private readonly appService: AppService) {}
  /*
    nest는 컨트롤러를 비즈니스 로직과 구분짓고 싶어한다.
    컨트롤러는 그냥 url만 가져오고 함수를 실행하는 정도일 뿐이다.
    나머지 비즈니스 로직은 service로 간다.
  */
  //express에서 get라우터와 같은 역할
  @Get()
  getHello(): string {
    return this.appService.getHello();
  }

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

app.service.ts

import { Injectable } from '@nestjs/common';
/*
  서비스는 일반적으로 실제로 function을 가진다. function 쓰는곳
  비즈니스 로직을 실행하는 부분
  필요하다면 데이터베이스에 접근한다.
*/
@Injectable()
export class AppService {
  getHello(): string {
    return 'Hello Nest!';
  }

  getHi(): string {
    return 'Hi Nest!';
  }
}

0개의 댓글