在NestJS官網中,有介紹到快速建立NestJS專案的方法,我們以此作為改良多新增Node.js的docker image。
首先先安裝Nest CLI。
npm i -g @nestjs/cli
之後透過下方指令快速建立專案
nest new twitter_2024_ithome_ironman
新建立好的專案,資料夾會有這些檔案
.
├─ dist
├─ node_modules
├─ src
| ├─ app.controller.ts
| ├─ app.controller.spec.ts
| ├─ app.module.ts
| ├─ app.service.ts
| └─ main.ts
├─ test
| ├─ app.e2e-spec.ts
| └─ jest-e2e.json
├─ .eslintrc.js
├─ .gitignore
├─ .prettierrc
├─ nest-cli.json
├─ package.json
├─ package-lock.json
├─ tsconfig.json
├─ tsconfig.build.json
└─ README.md
透過 npm run start
可以快速啟動專案,打開瀏覽器輸入 http://localhost:3000/, 能看到 Hello World! 就代表啟動成功了。
基本上我們接下來撰寫的程式碼,都放在src這個資料夾內,NestJS主要的入口會在 main.ts ,透過NestFactory 來建立應用程式。
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
app.module.ts
整個應用程式的root module,通常我們會把相關的功能包在同一個module,之後會再匯入root 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 {}
app.controller.ts controller的檔案主要都是用來撰寫路由,class每一個方法都會對應到一個路由,return 的資料就是API回傳給client的資料,可以透過@Get()、@Post()、@Put()、@Delete()等不同的裝飾器,設定不同的 http method。
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();
}
}
app.service.ts
通常CRUD的操作都會寫在service內,不過因為我們還沒有安裝資料庫,所以只先回傳Hello World!
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}
以上只是先大略的介紹module 、controller 、service 的用法,後續還有章節會詳細的介紹它們。
接下來設定Node.js的docker image,首先先建立一個docker-compose.yml檔案。
version: '3'
services:
nest:
image: node:20-slim
container_name: app
restart: always
working_dir: /usr/src/app
volumes:
- .:/usr/src/app
ports:
- 3000:3000
networks:
- my_network
command: npm run start:dev
networks:
my_network:
其中command的指令,可以自由選擇在package.json scripts內的啟動指令。建立好檔案,使用 docker-comopose up
指令,就可以啟動專案。
要不要加入Node.js的docker image,就看個人的選擇,其實不用docker也可以正常啟動 Nest.JS的專案,之後加入資料庫的連線,再設定docker也可以。
以上就是今天鐵人賽的內容,程式碼的部分都放在github。
本篇文章同步放在我的部落格,大家有空可以進來逛逛