Rumah > hujung hadapan web > tutorial js > Menguasai Pengesahan Bidang dan Pemeriksaan Kewujudan Pengguna di Node.js: Panduan Survival Pemaju

Menguasai Pengesahan Bidang dan Pemeriksaan Kewujudan Pengguna di Node.js: Panduan Survival Pemaju

Barbara Streisand
Lepaskan: 2025-01-26 04:29:09
asal
485 orang telah melayarinya

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

Malam Pangkalan Data Menangis: Kisah Pembangun Node.js

Pada pukul 3 pagi, satu panggilan telefon yang panik memecah kesunyian. Pangkalan data pengeluaran kami dipenuhi dengan profil pengguna yang tidak lengkap—titik akhir pendaftaran telah menerima nilai nol secara senyap selama berbulan-bulan! Pesalahnya? Pengawasan yang ketara: tiada pengesahan medan dan semakan kewujudan pengguna.

Pengalaman ini mengajar saya pelajaran penting: pengesahan medan yang mantap dan semakan kewujudan pengguna bukan pilihan—ia adalah asas integriti data. Mari terokai cara membina perlindungan ini ke dalam aplikasi Node.js anda, memanfaatkan pengajaran yang dipelajari daripada sesi memadam kebakaran pengeluaran yang tidak terkira banyaknya.


Langkah 1: Persediaan Projek

Struktur projek kami adalah mudah:

<code>cd src && mkdir utils
cd utils && touch validateRequiredFields.ts checkUserExists.ts</code>
Salin selepas log masuk

Ini menghasilkan dua modul teras:

  1. validateRequiredFields.ts: Mengendalikan pengesahan medan input.
  2. checkUserExists.ts: Mengurus semakan untuk pengguna sedia ada.

Langkah 2: Pengesahan Medan: Penjaga Data

Masalahnya: Permintaan yang tidak lengkap atau tidak sah boleh merosakkan data dan perkhidmatan ranap.

Penyelesaian:

Dalam 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>
Salin selepas log masuk

Amalan Terbaik: Gabungkan ini dengan pengesahan skema (cth., Zod, Joi) untuk peraturan yang rumit. Medan kata laluan ruang sahaja mengajar saya pelajaran itu dengan cara yang sukar!

Penyepaduan Express.js:

<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>
Salin selepas log masuk

Langkah 3: Semakan Kewujudan Pengguna: Penjaga Pintu

Masalahnya: Akaun pendua dan operasi pada pengguna yang tidak wujud.

Penyelesaian:

Dalam 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>
Salin selepas log masuk

Isi Utama: Sentiasa normalkan e-mel (huruf kecil, potong) untuk mengelakkan isu sensitif huruf besar. Sesi penyahpepijatan selama empat jam mengajar saya pelajaran itu!

Contoh Penggunaan:

<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>
Salin selepas log masuk

Pertahanan Berbilang Lapis

Pendekatan ini menggunakan pertahanan tiga lapis:

  1. Pengesahan Bahagian Pelanggan: Semakan UI asas.
  2. Pengesahan Medan: Pembersihan input peringkat API.
  3. Semakan Pangkalan Data: Pihak berkuasa tertinggi.

Trifecta ini menghalang:

  • Akaun pendua.
  • Rasuah data.
  • Kerentanan keselamatan.

Amalan Terbaik Sedia Pengeluaran

Pelajaran yang diperoleh daripada penggunaan yang tidak terkira banyaknya:

  1. Pengesahan Berpusat: Modul boleh guna semula seperti di atas.
  2. Pengendalian Ralat Konsisten: Format ralat piawai.
  3. Pengelogan: Kesan kegagalan pengesahan untuk amaran awal.
  4. Ujian Teliti: Kes tepi ujian (rentetan kosong, nol, ruang kosong).

Cabaran Anda:

Semak titik akhir pengesahan. Kenal pasti semakan pengesahan yang hilang. Laksanakan utiliti ini dan saksikan keajaiban kesilapan yang lebih sedikit! Ingat, pengesahan yang teguh ialah pelaburan untuk masa depan yang lebih stabil dan terjamin.

Atas ialah kandungan terperinci Menguasai Pengesahan Bidang dan Pemeriksaan Kewujudan Pengguna di Node.js: Panduan Survival Pemaju. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan