NestJS #1
Nest JS
: node.js & express ์์์ ์์ง์ด๋ ํ๋ ์์ํฌ => node.js์ ๋ฐฑ์๋ ๊ตฌ์ฑํ ์ ์๊ฒ ํจ
โ> node.js๋ ์ ์ฝ์ด ์์(api๋ฅผ ๋ง๋ค๋๋ url์ ์ด๋๋ค ๋์ง, ์ปจํธ๋กค๋ฌ, ํ ํ๋ฆฟ ์์น๋ ๋ง์๋๋ก)
=> nest.js๋ ๊ตฌ์กฐ๊ฐ ์์ด์ ์ฝ๊ฒ ๋ฐฑ์๋ ๋ง๋ค ์ ์์
Nest JS๋ก rest API ๋ง๋ค๊ธฐ
- ์ค์
-
insomnia ์ค์น
=> insomnia rest ๊ฒ์
-
nestjs/cli ์ค์น
1) npm i -g @nestjs/cli
2) nestJS๋ฅผ ์ฌ์ฉํ ํ์ผ๋ก ์ด๋
- ํ๋ก์ ํธ ์ด๋ฆ- nest new
3) cd ํ๋ก์ ํธ ์ด๋ฆ & code .
-
github์ repo ๋ง๋ค๊ธฐ
-
vscode terminal๋ก
- git remote add origin ๊นํ repo ์ฃผ์
- vscode
- src ํ์ผ์ app.controller.specํ์ผ ์ง์ฐ๊ธฐ -> ๋์ค์ ๋ค์ ๋ง๋ค๊ฑฐ
- npm run start:dev -> ์ดํ๋ฆฌ์ผ์ด์ ์คํ
- localholst:3000์ผ๋ก ์ ์
-
main.ts
์ด๋ฆ๋ณ๊ฒฝ ๊ธ์ง
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); // await NestFactort.creat(AppModule)ํธ์ถ await app.listen(3000); //3000๋ฒ์ ํฌํธ ๋ฆฌ์ค๋ } bootstrap();
-> ํ๋์ธ ๋ชจ๋(AppModule)์์ ์ดํ๋ฆฌ์ผ์ด์ ์์ค
- AppModule: ๋ชจ๋ ๊ฒ์ ๋ฃจํธ ๋ชจ๋ (๋ชจ๋์ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ผ๋ถ๋ถ)
-
app.module.ts
->main.ts์ AppModule
import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @Module({ // ๋ฐ์ฝ๋ ์ดํฐ imports: [], controllers: [AppController], providers: [AppService], }) export class AppModule {}
- ๋ฐ์ฝ๋ ์ดํฐ: ํด๋์ค์ ํจ์ ๊ธฐ๋ฅ์ ์ถ๊ฐ (=ํด๋์ค ์์ ํจ์)
- controllers: url์ ๊ฐ์ ธ์ค๊ณ ํจ์๋ฅผ ์คํ
- ๋ฐ์ฝ๋ ์ดํฐ: ํด๋์ค์ ํจ์ ๊ธฐ๋ฅ์ ์ถ๊ฐ (=ํด๋์ค ์์ ํจ์)
-
app.controller.ts
-> app.module.ts ์ module์์ controllers
import { Controller, Get } from '@nestjs/common'; import { AppService } from './app.service'; @Controller() export class AppController { constructor(private readonly appService: AppService) {} @Get()//๋ฐ์ฝ๋ ์ดํฐ getHello(): string { //stringํ ๋ฐํ return this.appService.getHello(); } }
- get ๋ฐ์ฝ๋ ์ดํฐ
-
app.service.ts
-> app.controller.ts ์ Controller ๋ฐ์ฝ๋ ์ดํฐ ์ appservice
import { Injectable } from '@nestjs/common'; @Injectable() export class AppService { getHello(): string { return 'Hello World!'; //ํ๋ฉด์ getHelloํจ์์ ๋ฆฌํด๊ฐ ํ์ } }
NestJS ์ฌ์ฉ์์
-> main.ts๋ก ๋ชจ๋ ๊ฑธ ์์
-
app.controller.ts
- Get ๋ฐ์ฝ๋ ์ดํฐ์ ์ ํจ์
import { Controller, Get } 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") // "/hello"๋ผ๋ url๋ก์ ์์ฒญ์ ๋ฐ์ sayHello(): string { //sayHello()๋ผ๋ ํจ์ ์คํ return "Hello everyone"; } }
- ๋ฌด์กฐ๊ฑด ๋ฐ์ฝ๋ ์ดํฐ๋ ๊พธ๋ฉฐ์ฃผ๋ ํจ์๋ ํด๋์ค๋ ๋ถ์ด์์ด์ผํจ!(๊ณต๋ฐฑ ์์ผ๋ฉด ์๋จ)
=> localhost:3000/hello์์ sayHelloํจ์ ์คํ
Appservice๊ฐ ํ์ํ ์ด์
nestJs๋ ์ปจํธ๋กค๋ฌ๋ฅผ ๋น์ง๋์ค ๋ก์ง๊ณผ ๊ตฌ๋ถ
- ์ปจํธ๋กค๋ฌ: url๊ฐ์ ธ์ค๊ณ ํจ์ ์คํ
- ๋น์ง๋์ค ๋ก์ง: ์๋น์ค
- ์๋น์ค: ์ค์ ๋ก function์ ๋๋ ๊ณณ
app service
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello Nest!';
}
getHi():string{
return "Hi Nest";
}
}
app.controller.ts
import { Controller, Get } 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(); //appservice์ getHiํจ์ ์ฌ์ฉ
}
}
app.module
-> ๋ฃจํธ๋ชจ๋(NestJS๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ๋ง๋ค๋ ์ด์ฉํ๋ ๊ฒ)
=> ๋ชจ๋ ๋ค importํด์ผํจ