Rumah > hujung hadapan web > tutorial js > Cara menggunakan express-validator sebagai middleware dalam Apl Express

Cara menggunakan express-validator sebagai middleware dalam Apl Express

Mary-Kate Olsen
Lepaskan: 2024-11-12 17:27:02
asal
608 orang telah melayarinya

How to use express-validator as a middleware in Express App

Helo semua, Dalam artikel ini kita akan belajar bagaimana kita boleh menyediakan express-validator sebagai middleware, juga kita akan menyelami lebih mendalam dalam butiran tentang kes penggunaan yang betul kaedah checkand body dalam pengesah nyata.
express-validator ialah perpustakaan yang berkuasa untuk mengesahkan dan membersihkan input dalam aplikasi Express. Ia menyediakan set fungsi pengesahan dan sanitasi yang teguh yang boleh digunakan untuk memastikan data masuk memenuhi keperluan khusus. Dokumentasi ini akan membimbing anda melalui penyediaan middleware pengesahan dan menggambarkan perbezaan utama antara kaedah semakan dan badan untuk pengesahan.

Selepas memasang express-validator, ikut langkah di bawah

Menyediakan Peraturan Pengesahan

Anda boleh sama ada menggunakan body() atau check() untuk menyediakan peraturan pengesahan.

  • check(): Pengesah fleksibel yang boleh menyemak data merentas pelbagai bahagian permintaan (seperti req.body, req.query dan req.params).
  • body(): Pengesah yang lebih disasarkan yang memberi tumpuan khusus pada pengesahan data dalam req.body.
  • validationResult(): Untuk mendapatkan semula dan mengendalikan keputusan pengesahan dalam fungsi middleware.

Mentakrifkan Perisian Tengah Pengesahan

Untuk menjadikan pengesahan anda boleh diguna semula dan memastikan laluan anda bersih, tentukan peraturan pengesahan dalam fungsi perisian tengah. Berikut ialah contoh fungsi middleware untuk laluan pendaftaran pengguna yang menyemak medan e-mel dan kata laluan.

import { check, validationResult } from 'express-validator';

// DEFINE VALIDATION RULES
const validateRegistration = [
    check('email')
        .isEmail()
        .withMessage('Please enter a valid email address')
        .isLength({ max: 100 })
        .withMessage('Email cannot exceed 100 characters'),

    check('password')
        .isLength({ min: 6 })
        .withMessage('Password must be at least 6 characters long')
        .isLength({ max: 255 })
        .withMessage('Password cannot exceed 255 characters'),

    // CHECK FOR VALIDATION ERRORS
    (req, res, next) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(400).json({ errors: errors.array() });
        }
        // IF NO ERRORS, MOVE TO NEXT MIDDLEWARE
        next(); 
    }
];
Salin selepas log masuk
Salin selepas log masuk

Menggunakan Middleware dalam Laluan

Selepas menentukan perisian tengah pengesahan anda, gunakannya dalam laluan yang mengendalikan permintaan masuk. Ini memastikan pengesahan berasingan daripada logik laluan.

import express from 'express';
const app = express();

app.use(express.json());

app.post('/register', validateRegistration, (req, res) => {
    // USE YOUR REGISTRATIO LOGIC HERE
    res.status(201).json({ message: 'User registered successfully' });
});

app.listen(3000, () => {
    console.log('Server running on http://localhost:8080');
});
Salin selepas log masuk
Salin selepas log masuk

Bagaimana Ia Berfungsi

  • Tentukan peraturan pengesahan: Tentukan setiap keperluan pengesahan medan (seperti panjang dan format) menggunakan tanda () atau badan().
  • Semak ralat: Gunakan validationResult() untuk menentukan sama ada sebarang ralat pengesahan wujud. Jika ralat ditemui, ia dikembalikan kepada pelanggan dengan kod status 400.
  • Teruskan: Jika tiada ralat ditemui, next() dipanggil untuk meneruskan logik pengendali laluan atau ke middleware seterusnya.

Kini, sebarang permintaan untuk /mendaftar akan disahkan mengikut peraturan dalam validateRegistration sebelum logik pendaftaran dilaksanakan.

Perbandingan Terperinci: semak vs badan

Kedua-dua check() dan body() ialah fungsi dalam express-validator yang mentakrifkan peraturan pengesahan untuk data masuk. Walau bagaimanapun, mereka berbeza dalam tempat mereka mencari data dalam permintaan dan cara ia biasanya digunakan.

  • tanda()
  1. Skop: Pengesah tujuan am.
  2. Kawasan Pengesahan: Boleh menyemak data merentas berbilang bahagian permintaan (seperti req.body, req.query, req.params).
  3. Kes Penggunaan Biasa: Berguna apabila anda memerlukan fleksibiliti, seperti apabila medan mungkin terdapat dalam URL, rentetan pertanyaan atau kandungan bergantung pada permintaan.

Contoh Penggunaan cek()

import { check, validationResult } from 'express-validator';

// DEFINE VALIDATION RULES
const validateRegistration = [
    check('email')
        .isEmail()
        .withMessage('Please enter a valid email address')
        .isLength({ max: 100 })
        .withMessage('Email cannot exceed 100 characters'),

    check('password')
        .isLength({ min: 6 })
        .withMessage('Password must be at least 6 characters long')
        .isLength({ max: 255 })
        .withMessage('Password cannot exceed 255 characters'),

    // CHECK FOR VALIDATION ERRORS
    (req, res, next) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(400).json({ errors: errors.array() });
        }
        // IF NO ERRORS, MOVE TO NEXT MIDDLEWARE
        next(); 
    }
];
Salin selepas log masuk
Salin selepas log masuk

Di sini, semak('email') akan mencari medan e-mel dalam semua bahagian permintaan, termasuk req.body, req.query dan req.params.

  • badan()
  1. Skop: Secara khusus menyasarkan req.body.
  2. Kawasan Pengesahan: Hanya melihat pada badan permintaan, menjadikannya sesuai untuk permintaan yang membawa data dalam badan (seperti permintaan POST, PUT atau PATCH).
  3. Kes Penggunaan Biasa: Diutamakan semasa mengendalikan penyerahan borang atau muatan JSON, yang mana anda tahu data hanya akan berada dalam badan permintaan.

Contoh Penggunaan badan()

import express from 'express';
const app = express();

app.use(express.json());

app.post('/register', validateRegistration, (req, res) => {
    // USE YOUR REGISTRATIO LOGIC HERE
    res.status(201).json({ message: 'User registered successfully' });
});

app.listen(3000, () => {
    console.log('Server running on http://localhost:8080');
});
Salin selepas log masuk
Salin selepas log masuk

Di sini, body('email') hanya akan menyemak medan e-mel dalam req.body, jadi ia tidak akan mengesannya jika ia berada dalam req.query atau req.params.

Bila Gunakan Setiap

  • tanda (): Apabila lokasi data mungkin berbeza-beza, seperti dalam parameter URL, rentetan pertanyaan atau badan.
  • body(): Apabila anda hanya berminat untuk mengesahkan data dalam req.body, yang biasa digunakan untuk API yang menerima data borang atau muatan JSON.

Contoh dengan Kedua-duanya
Anda boleh menggunakan kedua-dua check() dan body() dalam tatasusunan pengesahan yang sama untuk mengendalikan data daripada bahagian permintaan yang berlainan.

import { check } from 'express-validator';

const validateEmail = [
    check('email')
        .isEmail()
        .withMessage('Invalid email address'),

    (req, res, next) => {
        const errors = validationResult(req);
        if (!errors.isEmpty()) {
            return res.status(400).json({ errors: errors.array() });
        }
        next();
    }
];

Salin selepas log masuk

Dalam contoh ini:
body('email') hanya mengesahkan e-mel dalam kandungan permintaan.
check('token') mencari token merentas req.body, req.query dan req.params.

Kesimpulan

Menggunakan express-validator dengan cara ini memastikan pengesahan bersih, terurus dan cukup fleksibel untuk mengendalikan pelbagai format dan sumber input, membantu memastikan integriti dan keselamatan data dalam aplikasi anda.

Atas ialah kandungan terperinci Cara menggunakan express-validator sebagai middleware dalam Apl Express. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
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