iT邦幫忙

2024 iThome 鐵人賽

DAY 2
0

在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。

本篇文章同步放在我的部落格,大家有空可以進來逛逛


上一篇
用NestJS寫一個小型的推特專案-day1序言
系列文
用NestJS寫一個小型的推特專案2
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言