[Lv2] Nuxt 3 Server 功能實作:Server Routes 與動態 Sitemap
掌握 Nuxt 3 的 Nitro Server Engine 功能,實作 Server Routes (API Routes)、動態 Sitemap 與 Robots.txt,提升網站的 SEO 與架構彈性。
1. 面試回答主軸
- Server Routes (API Routes):使用
server/api或server/routes建立後端邏輯。常用於隱藏 API Key、處理 CORS、BFF (Backend for Frontend) 架構。 - 動態 Sitemap:透過 Server Routes (
server/routes/sitemap.xml.ts) 動態生成 XML,確保搜尋引擎能索引最新內容。 - Robots.txt:同樣透過 Server Routes 動態生成,或使用 Nuxt Config 配置,控制爬蟲存取權限。
2. Nuxt 3 Server Engine: Nitro
2.1 什麼是 Nitro?
Nitro 是 Nuxt 3 的全新伺服器引擎,它讓 Nuxt 應用程式可以部署到任何地方(Universal Deployment)。它不僅僅是一個伺服器,更是一個強大的建置與執行時工具。
2.2 Nitro 的核心特色
-
跨平台部署 (Universal Deployment): 可以編譯成 Node.js server、Serverless Functions (Vercel, AWS Lambda, Netlify)、Service Workers 等多種格式。Zero-config 即可部署到主流平台。
-
輕量且快速 (Lightweight & Fast): Cold start 時間極短,且生成的 bundle size 非常小(最小可達 < 1MB)。
-
自動程式碼分割 (Auto Code Splitting): 自動分析 Server Routes 的相依性,並進行 code splitting,確保啟動速度。
-
HMR (Hot Module Replacement): 不僅前端有 HMR,Nitro 讓後端 API 開發也能享有 HMR,修改
server/檔案無需重啟伺服器。 -
Storage Layer (Unstorage): 內建統一的 Storage API,可以輕鬆連接 Redis, GitHub, FS, Memory 等不同儲存介面。
-
Server Assets: 可以方便地在 Server 端存取靜態資源檔案。
3. Nuxt 3 Server Routes (API Routes)
3.1 什麼是 Server Routes?
Nuxt 3 內建了 Nitro 伺服器引擎,允許開發者直接在專案中編寫後端 API。這些檔案放在 server/api 或 server/routes 目錄下,會自動映射為 API endpoint。
server/api/hello.ts->/api/helloserver/routes/hello.ts->/hello
2.2 什麼情況下會用?(常見面試題 )
1. 隱藏敏感資訊 (Secret Management) 前端無法安全地儲存 Private API Key。透過 Server Routes 作為中介,可以在 Server 端使用環境變數存取 Key,只將結果回傳給前端。
// server/api/weather.ts
export default defineEventHandler(async (event) => {
const config = useRuntimeConfig();
// API Key 只在 Server 端使用,不會暴露給 Client
const data = await $fetch(
`https://api.weather.com/v1?key=${config.weatherApiKey}`
);
return data;
});
2. 處理 CORS 問題 (Proxy) 當外部 API 不支援 CORS 時,可以使用 Server Routes 作為 Proxy。瀏覽器請求 Nuxt Server (同源),Nuxt Server 請求外部 API (無 CORS 限制)。
3. Backend for Frontend (BFF) 將多個後端 API 的資料在 Nuxt Server 端聚合、過濾或轉換格式後,再一次性回傳給前端。減少前端請求次數與 Payload 大小。
4. 處理 Webhook 接收第三方服務(如金流、CMS)的 Webhook 通知。