實作待辦清單 API (1):環境建置與原生 HTTP 伺服器
在這系列教學中,我們將不依賴任何框架(如 Express),純粹使用 Node.js 內建的 http 模組來實作一個「待辦清單 (Todo List)」的 RESTful API。這能幫助初學者打好最扎實的 Node.js 後端基礎!
💡 完整程式碼下載 為了方便對照與學習,本系列教學的最終完整程式碼已經開源在 GitHub 上: 👉 2026hexschoolNodejs 專案原始碼 如果你在實作過程中遇到 bug 或卡關,可以直接參考或下載完整的原始碼喔!
本篇我們將從 專案初始化 開始,一步步架設起網頁伺服器。
1. 專案初始化與安裝套件
首先,建立一個空的專案資料夾,然後在終端機輸入以下指令進行初始化:
npm init -y
這會產生一個 package.json 檔案,它是整個專案的設定檔。
接下來,我們需要安裝兩個輔助開發的套件:
npm install uuid
npm install nodemon
套件小科普:
uuid:用來自動產生獨一無二的亂數 ID(例如:f47ac10b-58cc-4372-a567-0e02b2c3d479),我們需要它來作為每筆待辦事項的唯一識別碼。nodemon:這是一個開發神器!傳統用node server.js啟動伺服器時,每次改完程式碼都要手動重啟。有了nodemon,它會自動「監聽」檔案變更,存檔的瞬間伺服器就會自動重啟,大幅提升開發效率。
2. 決定模組化標準 (ES Module)
打開剛產生的 package.json,手動加入一行 "type": "module":
{
"name": "todo-api",
"version": "1.0.0",
"type": "module", // <-- 加入這行
"main": "server.js",
"scripts": {
"start": "nodemon server.js"
}
}
為什麼要加這個? Node.js 早期預設使用
CommonJS標準(語法是require)。但現代前端開發(如 React, Vue)大多使用ES Module標準(語法是import / export)。為了讓語法統一並接軌現代標準,我們指定專案使用module。
3. 測試套件與伺服器啟動
建立一支 server.js 檔案,先來測試我們安裝的套件:
// 使用 ES Module 語法引入套件
import { v4 as uuidv4 } from "uuid";
const uuid = uuidv4();
console.log("測試產生的 UUID:", uuid);
在終端機輸入我們剛剛在 package.json 裡設定好的捷徑:
npm run start
如果終端機有順利印出亂碼 ID,就代表環境設定成功了!你可以隨便改個字並存檔,看看 nodemon 有沒有幫你自動重啟。
4. 建立原生 Web Server
接下來我們要召喚 Node.js 內建的 http 模組,來建立一個真正的網頁伺服器。
將 server.js 的程式碼改寫如下:
import http from "http";
// 定義 HTTP 標頭 (Headers),處理 CORS 跨域問題
const headers = {
// 允許跨網域存取的 Header 欄位
'Access-Control-Allow-Headers': 'Content-Type, Authorization, Content-Length, X-Requested-With',
// 允許所有來源網站跨域打 API ('*' 代表全部)
'Access-Control-Allow-Origin': '*',
// 允許的 HTTP 請求方法
'Access-Control-Allow-Methods': 'PATCH, POST, GET, OPTIONS, DELETE',
// 告知客戶端回傳的資料格式為 JSON
'Content-Type': 'application/json'
};
// 建立 HTTP 伺服器
const server = http.createServer((req, res) => {
// 設定狀態碼為 200 (成功),並帶入剛才設定的 headers
res.writeHead(200, headers);
// 回傳內容
res.write("Hello World");
// 結束這次的回應 (一定要寫,否則網頁會一直轉圈圈)
res.end();
});
// 設定伺服器監聽的 Port 號
server.listen(8080);
認識 CORS 與 Headers
當前端網頁(例如 http://localhost:3000)想要打 API 給後端(例如 http://localhost:8080),因為網址(Port 號)不同,瀏覽器基於安全性會啟動「跨域阻擋 (CORS)」。
我們在 headers 裡設定的 Access-Control-Allow-Origin: '*',就是在跟瀏覽器說:「放行吧!不管誰來打這個 API,我都允許!」
現在,你可以打開瀏覽器輸入 http://localhost:8080,如果看到 "Hello World",恭喜你,你的第一台原生 Node.js 伺服器成功上線了!