首頁 > web前端 > js教程 > 掌握現場驗證和用戶存在檢查。

掌握現場驗證和用戶存在檢查。

Barbara Streisand
發布: 2025-01-26 04:29:09
原創
485 人瀏覽過

Mastering Field Validation and User Existence Checks in Node.js: A Developer’s Survival Guide

資料庫哭泣的夜晚:node.js開發人員的故事

>凌晨3點,一個瘋狂的電話打破了沉默。我們的生產資料庫充滿了不完整的使用者設定檔 - 註冊端點已經默默地接受了數月的空值! 罪魁禍首? 一個明顯的監督:缺少現場驗證和使用者存在檢查。

這種經驗教會了我一個關鍵的課程:魯棒的現場驗證和用戶存在檢查不是可選的 - 他們是數據完整性的基石。 讓我們探索如何將這些保障措施建置到您的node.js應用程式中,利用從無數生產的消防會議中學到的經驗教訓。


步驟1:項目設定

我們的專案結構將很簡單:

<code>cd src && mkdir utils
cd utils && touch validateRequiredFields.ts checkUserExists.ts</code>
登入後複製

這創建了兩個核心模組:

  1. validateRequiredFields.ts:處理輸入欄位驗證。
  2. checkUserExists.ts:管理現有使用者的檢查。

>步驟2:欄位驗證:資料監護人

問題:不完整或無效的請求可能會損壞資料和崩潰服務。 >

解:

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>
登入後複製
>步驟3:使用者存在檢查:Gatekeeper

問題:

對不存在的使用者重複的帳戶和操作。

解:

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>
登入後複製

此方法採用三層防禦:

客戶端驗證:
    基本UI檢查。
  1. 欄位驗證:
  2. api級輸入消毒。
  3. >資料庫檢查:
  4. 終極授權。
  5. > 此三桿範例預防:

>重複帳戶。

    資料損壞。
  • 安全漏洞。
  • >準備生產的最佳實踐
從無數部署中汲取的教訓:
  1. 集中驗證:可重複使用的模塊,如上面的模塊。
  2. 一致的錯誤處理:標準化錯誤格式。
  3. 日誌記錄: 跟踪驗證失敗以發出早期警告。
  4. 徹底測試:測試邊緣情況(空字符串、空值、空格)。

你的挑戰:

查看身份驗證端點。識別缺失的驗證檢查。實施這些實用程序並見證更少錯誤的魔力! 請記住,強大的驗證是對更穩定、更安全的未來的投資。

以上是掌握現場驗證和用戶存在檢查。的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板