iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
自我挑戰組

30 天用 Vibe Coding 打造多角色復健追蹤應用系列 第 11

Day 11|第二階段:核心 API 開發 (五)輸入驗證系統與錯誤處理強化

  • 分享至 

  • xImage
  •  

今天的開發重點是 Step 6:加入輸入驗證與強化錯誤處理,目的是確保系統的資料完整性與 API 安全性。Claude設計了一個 三層式驗證架構,並搭配統一的錯誤處理機制,讓整體 API 更加健壯且易於維護。


🏗️ 三層式驗證架構

1️⃣ Validation Utilities

位置src/main/js/core/validation/validators.js
這一層提供各種通用的驗證工具函式,可在不同模組中重複使用,包括:

  • validateEmail():使用正則表達式檢查 Email 格式
  • validatePassword():檢查密碼強度(大小寫、數字、特殊字元)
  • validateObjectId():驗證 MongoDB ObjectId 格式
  • validateDate():檢查日期格式,並支援過去/未來日期限制
  • validatePhoneNumber():驗證國際電話格式
  • validateNumericRange():數值範圍驗證(含最小/最大值)
  • validateString():字串長度與模式檢查
  • validateArray():陣列結構與項目驗證
  • validateEnum():列舉值驗證(含大小寫選項)
  • validateFile():檔案上傳驗證(大小與類型限制)
  • sanitizeInput():輸入清理,防止 XSS 攻擊

範例程式碼(簡化版):

static validateEmail(email) {
  const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
  const isValid = typeof email === 'string' && emailRegex.test(email);
  return { isValid, message: isValid ? null : 'Invalid email format' };
}

這層提供了統一的錯誤訊息格式 ({ isValid, message }),便於在後端或前端直接使用。


2️⃣ Validation Schemas

位置src/main/js/core/validation/schemas.js
定義針對不同業務場景的預設驗證規則,例如:

  • userRegistration:完整的使用者註冊驗證
  • userLogin:登入憑證檢查
  • rehabTaskCreation:復健任務建立驗證(指示與排程)
  • progressSession:進度紀錄驗證(疼痛與活動度評估)
  • passwordChange:密碼修改驗證
  • queryParams:URL 查詢參數驗證
  • commentCreation:留言建立驗證(類型與可見性規則)

這一層能確保不同 API 的輸入欄位皆符合預期格式,並減少重複程式碼。


3️⃣ Validation Middleware

位置src/main/js/api/middleware/validationMiddleware.js
最後一層是與 Express 路由直接整合的中介層,用來在 API 接收請求時即時檢查輸入資料:

  • validateBody():驗證 request body 是否符合對應的 Schema
  • validateQuery():驗證 URL 查詢參數
  • validateParams():驗證路由參數(例如 ObjectId)
  • validateFileUpload():檢查檔案上傳的大小與格式
  • validateCustom():支援客製化驗證邏輯
  • validateFieldCombinations():跨欄位條件驗證
  • validateRateLimit():內建 API 請求速率限制

範例

router.post('/register',
  validateBody(schemas.userRegistration),
  userController.register
);

⚡ 錯誤處理強化

為了提升系統的健壯性與安全性,我同時加上了一套統一的錯誤處理機制:

  • 一致的錯誤回應格式:所有 API 都回傳統一的 JSON 結構

  • 詳細的驗證錯誤訊息:提供欄位級的錯誤描述,方便前端呈現

  • 安全防護

    • try-catch 包裝所有業務邏輯,避免伺服器崩潰
    • 輸入資料經過 sanitizeInput() 防範 XSS
    • Rate limiting 防止 API 濫用

✨ 成果與下一步

透過這套三層式驗證架構與統一錯誤處理系統,整個專案的 API 變得更安全、更易維護,並且大幅減少了潛在的輸入錯誤。
接下來,我會開始將這些驗證中介層全面應用到現有的 API 路由,確保所有端點都能享有同等級的防護。



上一篇
Day 10|第二階段:核心 API 開發 (四)復健進度追蹤核心系統
系列文
30 天用 Vibe Coding 打造多角色復健追蹤應用11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言