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!';
}
}