iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Modern Web

30 天,讓 TypeScript 把你的 Node.js 開發再升級系列 第 7

Day 7|如何建立一個 TypeScript + Node.js 環境 (2):專案架構與資料庫設定

  • 分享至 

  • xImage
  •  

嗨~昨天我們已經有一個能跑起來的 TypeScript + Node.js 開發環境。接著,在正式開發 API 之前,先來點暖身 —— 建立一個清晰、可維護的專案架構,並完成環境變數與資料庫連線設定。這些基礎工具就是未來專案能否穩定推進的關鍵。


專案架構整理

建立資料夾結構

為了讓專案更有條理、方便後續維護,我們在 src 底下建立以下資料夾:

  • config:存放設定檔(例如資料庫連線設定)。
  • controllers:處理 API 業務邏輯。
  • entities:定義資料庫模型 (Entity)。
  • middleware:存放中間件。
  • routes:定義 API 路由。
  • utils:常用工具函數。

建立指令:

cd src
mkdir config controllers entities middleware routes utils

最終結構如下:

src/
  ├── config/
  ├── controllers/
  ├── entities/
  ├── middleware/
  ├── routes/
  ├── utils/
  └── app.ts


環境變數設定

為什麼要用環境變數?

因為專案常常需要存放敏感資訊(像是資料庫密碼、API 金鑰),這些東西絕不能直接寫死在程式碼裡。

安裝與設定 dotenv

  1. 安裝套件與型別:

    npm install dotenv
    npm install @types/dotenv --save-dev
    
    
  2. 在專案根目錄建立 .env 檔案:

    touch .env
    
    

    在檔案內輸入:

    DB_HOST=localhost
    DB_NAME=db_name
    DB_USERNAME=你的資料庫使用者
    DB_PASSWORD=你的密碼
    DB_PORT=5432
    
  3. 確認 .gitignore有下方配置:

    .env
    
    

⚠️ .env 內含敏感資訊,務必避免上傳到 GitHub!


資料庫連線設定

這裡我們會使用 PostgreSQL 搭配 TypeORM 作為 ORM 工具。

安裝套件

npm install typeorm pg

設定 TypeORM 連線

src/config 建立 db.ts

import "reflect-metadata";
import { DataSource } from "typeorm";
import { Todo } from "../entities/Todo";
import dotenv from "dotenv";

dotenv.config();

export const AppDataSource = new DataSource({
  type: "postgres",
  host: process.env.DB_HOST,
  port: Number(process.env.DB_PORT),
  username: process.env.DB_USERNAME,
  password: process.env.DB_PASSWORD,
  database: process.env.DB_NAME,
  entities: [Todo],
  synchronize: true, // 開發階段建議 true,正式環境請改成 false
  logging: true,
});

⚠️ synchronize: true 會自動產生 ORM 所對應的資料表,僅限開發階段使用;正式環境建議使用 migration!


定義資料模型

在 TypeORM 裡,Entity 就是資料庫模型,負責定義表格結構。

建立 Todo Entity

  1. 新增檔案:

    touch src/entities/Todo.ts
    
    
  2. 編輯內容:

    import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";
    
    @Entity()
    export class Todo {
      @PrimaryGeneratedColumn("uuid")
      id!: string;
    
      @Column()
      title!: string;
    
      @Column({ default: false })
      completed!: boolean;
    }
    
    
  3. 確認 tsconfig.json,確保支援裝飾器:

    "experimentalDecorators": true,
    "emitDecoratorMetadata": true
    
    

💡 小技巧:

  • ! 表示該屬性必填。

👉 明天(Day 8)我們即將開始開發 API ,讓 TypeScript + Node.js 專案更豐富 🚀 !

補充資源

Github 範例程式碼

git commit : setup backend structure and typeORM setting


上一篇
Day 6|如何建立一個 TypeScript + Node.js 環境 (1):初始化專案
下一篇
Day 8|打造你的第一個 TodoList API:一步步實現 CRUD 功能
系列文
30 天,讓 TypeScript 把你的 Node.js 開發再升級8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言