- Main에서 AppModule로 들어갔고
- AppModule에서 Controller로 들어갔고
- Controller에서는 Service로 들어갔다.
- Service에서는 텍스트를 변경하면 localhost:3000 이 변경되었다.
Main
NestJs는 main.ts 파일을 가지고 있고 무조건 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();
- NestJs 애플리케이션은 main.ts 에서 시작한다.
- 하나의 모듈에서 애플리케이션을 생성한다.
- 앱 모듈은 모든 것의 루트 모듈 같은 것이다.
- 모듈이란 애플리케이션의 일부분이다.
- 예를 들어 인증을 담당하는 애플리케이션이 있다면, 그게 users 모듈이 된다.
Module
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 해주기
@Module는 데코레이터이다.
데코레이터는 클래스에 함수 기능을 추가할 수 있다.
클래스 위의 함수이고, 클래스 위에 움직인다 생각하면 된다.
export class AppModule {}
위처럼 클래스는 비어 있어 보이지만 @Module 안에 있다.
Controller
Controller는 URL를 가져오는 역할
nodeJs의 Controller는 express의 라우터 같은 존재
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.getSay();
// sayHello(), getSay() = Controller함수와 Service함수 이름이 같지 않아도 된다.
}
@Post('/hi')
sayHi(): string {
return 'TEST - Hi ~';
// 이처럼 string 값을 작성해도 브라우저에서 작동하지만
// NestJs는 Controller를 비즈니스 로직이랑 구분 짓고 싶어한다.
// - Controller는 URL 를 가져오는 역할
// - Service는 일반적으로 실제로 Function 을 가지는 부분
}
}
- URL을 가져오고 Function을 리턴
- URL 매핑
- request 받음
- query로 넘겨주는 역할
- Body를 넘기는 역할
@Get 데코레이터
이것이 express의 get 라우터와 같은 역할을 한다.
Controller는 expressJs의 controller/router 같은 것이다!
expressJs에서는 라우터에서 app.get이라고 쓰고 함수를 썼다.
@Get('/hello')라고 하는 것만 빼면 비슷하다.
URL을 가져와서 함수로 매핑하는 것!
NestJs 덕분에 라우터를 세팅하지 않아도 자동으로 된다.
Service
Service는 일반적으로 실제로 Function을 가지는 부분
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello Nest!';
}
getSay(): string {
return 'Say Nest!';
}
}
- Function을 놓는 곳
- 로직 관리
- 비즈니스 로직을 실행하는 역할
- 필요하다면 데이터베이스에 요청
'Frontend > Nest.js' 카테고리의 다른 글
NestJS : 형변환 (0) | 2023.01.09 |
---|---|
NestJS : 라우터 및 데코레이터 설명 (0) | 2023.01.09 |
Nuxt, Next, Nest 차이점 (0) | 2022.12.30 |
Express가 좋을까 NestJS가 좋을까? (0) | 2022.12.30 |
NestJS 소개 (0) | 2022.12.30 |