前情提要:從前端到後端的橋樑
前面了解 React、Vue 或其他前端框架,但當你需要與資料庫溝通、處理使用者輸入或串接第三方服務時,就需要一個能處理 HTTP 請求的後端框架。這時,Express + Node.js 就是最輕量、最易入門的選擇。

Copilot 建議我的文章順序,也是我這篇的目錄。CI/CD 會留在下一篇~
Express 是什麼?為什麼選它?
Express 是一個基於 Node.js 的 Web 應用框架,讓你能快速建立 API、處理路由、管理中介軟體(middleware)等。簡單來說,它是你與前端、資料庫之間的橋樑。為什麼要建立 routes?
在 Express 裡,「routes(路由)」就像是網站的導覽地圖,它告訴伺服器「當使用者發送某個請求時,要去哪裡處理這個請求」。
舉例來說:
• 使用者打開 → 伺服器就去找「處理使用者資料」的程式碼
• 使用者送出 POST 到 → 伺服器就去執行「登入邏輯」
所以建立 routes 的目的就是:
• 把不同功能的 API 分門別類
• 讓程式碼更清楚、更好維護
• 幫助前端知道該怎麼跟後端溝通
你可以把 routes 想成「前端按下按鈕 → 後端接收到指令 → 執行對應的功能」的橋樑。
① Express CRUD 操作入門
📌 HTTP 方法語義與用途

這些可以對應到:

這就是 CRUD 的原本意義(圖片來源)what is rest API
What Is REST API? Examples And How To Use It: Crash Course System Design #3
來練習看看吧,範例程式碼要在哪裡執行?
你可以在本機建立一個小型 Express 專案來執行這段程式碼。步驟如下:
① 在命令提示元建立專案資料夾
我用vscode的terminal

mkdir my-api-demo
cd my-api-demo
② 初始化 Node.js 專案 (要先裝node.js喔,這裡我請AI 協助)
安裝 Node.js(含 npm)
1. 前往官方網站下載安裝程式: 👉 https://nodejs.org/
2. 建議選擇「LTS(長期支援版)」,比較穩定。
3. 安裝過程中請確保勾選「Add to PATH」選項,這樣系統才能找到 和 指令。
不要在 或 資料夾裡操作 Node 專案,建議另外新增資料夾
mkdir my-node-project
cd my-node-project
npm init -y
4. 安裝完成後,重新啟動終端機,再次輸入:
npm init -y
③ 安裝 Express
npm install express

④ 建立 server.js 檔案,貼上範例程式碼
// server.js
const express = require('express');
const app = express();
app.use(express.json());
app.get('/items', (req, res) => {
res.send('取得所有項目');
});
app.post('/items', (req, res) => {
res.send('新增項目');
});
app.put('/items/:id', (req, res) => {
res.send(`更新項目 ${req.params.id}`);
});
app.delete('/items/:id', (req, res) => {
res.send(`刪除項目 ${req.params.id}`);
});
app.listen(3000, () => console.log('Server is running on port 3000'));
⑤ 啟動伺服器
node server.js
⑥ 用 Postman 或 curl 測試 API
例如:
curl http://localhost:3000/items
你就會看到伺服器回傳 的字樣
② 專案基本結構與環境設置
package.json
與 package-lock.json
差別
在團隊協作時,可能因作業系統不同環境不同,導致下載的 npm 版本不一致,所以要把package-lock.json
加到 git
鎖定
你知道package-lock.json的功能嗎?跟package.json有什麼差?【npm教學】

.gitignore
實際用法:避免 push 不必要的檔案
避免將以下檔案 push 到 Git:node_modules/
.env
*log.
為什麼不要 push?node_modules/
- 太大了:這個資料夾可能包含上千個檔案,幾百 MB,甚至幾 GB,會讓 Git repo 膨脹到難以管理。
為什麼不要 push?.env
— 環境變數檔案
- 包含敏感資訊:像是 API 金鑰、資料庫密碼、JWT secret 等,push 上去就等於公開了你的鑰匙。
- 不同環境不同設定:開發、測試、正式環境的 通常不一樣,push 上去會造成混淆或錯誤。
- 正確做法:在
.gitignore
加入.env
。建議建立.env.example
,只列出變數名稱,不含值,方便其他開發者參考。
為什麼不要 push?.*log
— 日誌檔案
- 無意義的變更(紀錄每次變更):log 檔會不斷更新,造成 Git commit 記錄混亂。
- 可能包含錯誤或敏感資訊:像是錯誤堆疊、使用者資料、debug 訊息等,不適合公開。
- 佔空間又難讀:Git 不是用來儲存這類動態檔案的。
正確做法:.gitignore
加入:
*.log logs/
「Git 是用來記錄程式的設計圖,不是用來搬磚頭。像node_modules
就是磚頭,太重又可以重建;.env
是鑰匙,不能亂丟;而*.log
是施工現場的雜音,沒必要記錄。」
📌 專案目錄結構範例圖
my-express-app/
├── routes/
│ └── items.js
├── .env
├── .gitignore
├── package.json
├── server.js
└── node_modules/
③ 為什麼 RESTful 重要?
參考資料:
RESTful APIs in 100 Seconds // Build an API from Scratch with Node.js Express
RESTful API 是現代 Web 應用的溝通語言,它的重要性來自於:
• 一致性:統一的設計原則讓前後端協作更順暢。
• 可預測性:開發者只看 URL 和 HTTP 動作就能猜出功能。
• 可擴充性:資源導向設計讓 API 更容易擴充與維護。
• 語意清晰:HTTP 動作(GET、POST、PUT、DELETE)本身就代表操作意圖。
資源導向設計:以 /user
為例
在 RESTful 中,一切都是「資源」(名詞),而不是「動作」 (動詞)。例如:
GET /users → 取得所有使用者
GET /users/42 → 取得 ID 為 42 的使用者
POST /users → 新增使用者
PUT /users/42 → 更新 ID 為 42 的使用者
DELETE /users/42 → 刪除 ID 為 42 的使用者
這樣的設計讓 API 像是在操作資料庫中的「表格」,而不是呼叫一堆動詞。
What Is REST API? Examples And How To Use It: Crash Course System Design #3

表格由AI生成
📌 表格:HTTP 動作 vs RESTful API 路徑設計對照表

在設計 RESTful API 路由時,我們定義了資源的操作方式,例如 的新增、查詢、更新與刪除。但這些路由背後的核心,其實是資料的結構與儲存方式。
為了讓 API 能夠穩定地操作資料庫,我們需要設計清晰的資料模型,並透過 ORM 或 ODM 工具來管理資料的存取邏輯。這不只是程式碼的封裝,更是資料與業務邏輯的橋樑。
4.資料存取層架構:ORM vs ODM
• ORM(Object-Relational Mapping):用物件操作 SQL 資料庫(如 Sequelize、TypeORM)
• ODM(Object-Document Mapping):用物件操作 NoSQL 資料庫(如 Mongoose for MongoDB)
資料模型設計範例
• Sequelize 定義 User
模型的方式,透過這個工具把 SQL 轉成可用JS 操作的方式,特別用來操作關聯型資料庫。
• Mongoose 定義 User
schema 的方式, 把 MongoDB 的文件變成 JavaScript 物件,還能加上驗證與邏輯
• 對照 RESTful 路由/User
的資料結構

🔹 結語
由於本篇篇幅太長,我把 CI/ CD 獨立出來再做說明。