>凌晨3點,一個瘋狂的電話打破了沉默。我們的生產資料庫充滿了不完整的使用者設定檔 - 註冊端點已經默默地接受了數月的空值! 罪魁禍首? 一個明顯的監督:缺少現場驗證和使用者存在檢查。
這種經驗教會了我一個關鍵的課程:魯棒的現場驗證和用戶存在檢查不是可選的 - 他們是數據完整性的基石。 讓我們探索如何將這些保障措施建置到您的node.js應用程式中,利用從無數生產的消防會議中學到的經驗教訓。
我們的專案結構將很簡單:
<code>cd src && mkdir utils cd utils && touch validateRequiredFields.ts checkUserExists.ts</code>
這創建了兩個核心模組:
validateRequiredFields.ts
:處理輸入欄位驗證。 checkUserExists.ts
:管理現有使用者的檢查。 問題:不完整或無效的請求可能會損壞資料和崩潰服務。
解:
in:validateRequiredFields.ts
<code class="language-typescript">// utils/validateRequiredFields.ts interface ValidationResult { isValid: boolean; error?: string; } export const validateRequiredFields = (fields: Record<string, any>): ValidationResult => { const missing = Object.entries(fields) .filter(([_, value]) => !value?.toString().trim()) .map(([key]) => key); if (missing.length > 0) { return { isValid: false, error: `Missing fields: ${missing.join(', ')}` }; } return { isValid: true }; };</code>
最佳實務:將其與架構驗證(例如ZOD,JOI)結合使用,以獲得複雜規則。 一個只有空間的密碼欄位教我這堂課很難! >
Express.js Integration:
<code class="language-typescript">// routes/auth.ts app.post('/register', async (req, res) => { const { email, password } = req.body; const validation = validateRequiredFields({ email, password }); if (!validation.isValid) { return res.status(400).json({ error: validation.error }); } // ... registration logic ... });</code>
對不存在的使用者重複的帳戶和操作。
解:in
:
checkUserExists.ts
<code class="language-typescript">// utils/checkUserExists.ts import pool from '../db/db'; interface CheckResult { exists: boolean; userData?: any; } export const checkUserExists = async (email: string, shouldExist: boolean = true): Promise<CheckResult> => { const result = await pool.query( 'SELECT * FROM users WHERE LOWER(email) = LIMIT 1', [email.trim()] ); const exists = result.rows.length > 0; if (shouldExist && !exists) throw new Error('User not found'); if (!shouldExist && exists) throw new Error('Email already registered'); return { exists, userData: exists ? result.rows[0] : undefined }; };</code>
始終將電子郵件(小寫,修剪)歸一化,以避免對病例敏感的問題。 一個四個小時的調試課程教了我那堂課!
>用法範例:多層防禦
<code class="language-typescript">// routes/auth.ts app.post('/register', async (req, res) => { try { await checkUserExists(email, false); // Expect no existing user // ... create user ... } catch (error) { return res.status(409).json({ error: error.message }); } });</code>
>重複帳戶。
查看身份驗證端點。識別缺失的驗證檢查。實施這些實用程序並見證更少錯誤的魔力! 請記住,強大的驗證是對更穩定、更安全的未來的投資。
以上是掌握現場驗證和用戶存在檢查。的詳細內容。更多資訊請關注PHP中文網其他相關文章!