Heim >Web-Frontend >js-Tutorial >So verwenden Sie Express-Validator als Middleware in der Express-App

So verwenden Sie Express-Validator als Middleware in der Express-App

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-12 17:27:02644Durchsuche

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

Hallo zusammen, in diesem Artikel erfahren wir, wie wir den Express-Validator als Middleware einrichten können, außerdem werden wir detailliert auf den richtigen Anwendungsfall von Check- und Body-Methoden eingehen Express-Validator.
Express-Validator ist eine leistungsstarke Bibliothek zum Validieren und Bereinigen von Eingaben in Express-Anwendungen. Es bietet einen robusten Satz an Validierungs- und Bereinigungsfunktionen, mit denen sichergestellt werden kann, dass eingehende Daten bestimmte Anforderungen erfüllen. Diese Dokumentation führt Sie durch die Einrichtung der Validierungs-Middleware und veranschaulicht die wichtigsten Unterschiede zwischen den Prüf- und Body-Methoden für die Validierung.

Befolgen Sie nach der Installation des Express-Validators die folgenden Schritte

Validierungsregeln einrichten

Sie können entweder body() oder check() verwenden, um die Validierungsregeln einzurichten.

  • check(): Ein flexibler Validator, der Daten in verschiedenen Teilen einer Anfrage überprüfen kann (z. B. req.body, req.query und req.params).
  • body(): Ein gezielterer Validator, der sich speziell auf die Validierung von Daten innerhalb von req.body konzentriert.
  • validationResult(): Zum Abrufen und Verarbeiten von Validierungsergebnissen in einer Middleware-Funktion.

Validierungs-Middleware definieren

Um Ihre Validierung wiederverwendbar zu machen und Ihre Routen sauber zu halten, definieren Sie Validierungsregeln in einer Middleware-Funktion. Hier ist eine Beispiel-Middleware-Funktion für eine Benutzerregistrierungsroute, die die E-Mail- und Passwortfelder überprüft.

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(); 
    }
];

Verwendung von Middleware in Routen

Nachdem Sie Ihre Validierungs-Middleware definiert haben, verwenden Sie sie in der Route, die die eingehende Anfrage verarbeitet. Dadurch bleibt die Validierung von der Routenlogik getrennt.

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');
});

Wie es funktioniert

  • Validierungsregeln definieren: Geben Sie die Validierungsanforderungen jedes Felds (z. B. Länge und Format) mit check() oder body() an.
  • Auf Fehler prüfen: Verwenden Sie validationResult(), um festzustellen, ob Validierungsfehler vorliegen. Wenn Fehler gefunden werden, werden diese mit dem Statuscode 400 an den Client zurückgegeben.
  • Weiter: Wenn keine Fehler gefunden werden, wird next() aufgerufen, um mit der Route-Handler-Logik oder zur nächsten Middleware fortzufahren.

Jetzt werden alle Anfragen an /register gemäß den Regeln in „validateRegistration“ validiert, bevor die Registrierungslogik ausgeführt wird.

Detaillierter Vergleich: Scheck vs. Körper

Sowohl check() als auch body() sind Funktionen innerhalb des Express-Validators, die Validierungsregeln für eingehende Daten definieren. Sie unterscheiden sich jedoch darin, wo sie innerhalb der Anfrage nach Daten suchen und wie sie normalerweise verwendet werden.

  • check()
  1. Geltungsbereich: Universeller Validator.
  2. Validierungsbereiche: Kann Daten über mehrere Anforderungsteile hinweg prüfen (z. B. req.body, req.query, req.params).
  3. Typische Anwendungsfälle: Nützlich, wenn Sie Flexibilität benötigen, z. B. wenn ein Feld je nach Anfrage in der URL, der Abfragezeichenfolge oder im Text vorhanden sein könnte.

Beispiel für die Verwendung von check()

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(); 
    }
];

Hier sucht check('email') nach dem E-Mail-Feld in allen Teilen der Anfrage, einschließlich req.body, req.query und req.params.

  • body()
  1. Geltungsbereich: Zielt speziell auf req.body.
  2. ab
  3. Validierungsbereich: Betrachtet nur den Anfragetext und ist daher ideal für Anfragen, die Daten im Text enthalten (z. B. POST-, PUT- oder PATCH-Anfragen).
  4. Typische Anwendungsfälle: Bevorzugt bei der Bearbeitung von Formularübermittlungen oder JSON-Nutzlasten, bei denen Sie wissen, dass sich die Daten nur im Anforderungstext befinden.

Beispiel für die Verwendung von body()

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');
});

Hier prüft body('email') nur das E-Mail-Feld in req.body und erkennt es daher nicht, wenn es sich in req.query oder req.params befindet.

Wann jeweils zu verwenden ist

  • check(): Wenn der Speicherort der Daten variieren kann, z. B. in einem URL-Parameter, einer Abfragezeichenfolge oder einem Text.
  • body(): Wenn Sie nur an der Validierung von Daten in req.body interessiert sind, was bei APIs üblich ist, die Formulardaten oder JSON-Nutzlasten akzeptieren.

Beispiel mit Beidem
Sie können sowohl check() als auch body() im selben Validierungsarray verwenden, um Daten aus verschiedenen Teilen der Anfrage zu verarbeiten.

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();
    }
];

In diesem Beispiel:
body('email') validiert nur E-Mails im Anfragetext.
check('token') sucht nach Token in req.body, req.query und req.params.

Abschluss

Durch die Verwendung von Express-Validator auf diese Weise bleibt die Validierung sauber, verwaltbar und flexibel genug, um eine Vielzahl von Eingabeformaten und -quellen zu verarbeiten, und trägt so zur Gewährleistung der Datenintegrität und -sicherheit in Ihrer Anwendung bei.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Express-Validator als Middleware in der Express-App. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn