Expressアプリのミドルウェアとしてexpress-validatorを使用する方法

Mary-Kate Olsen
リリース: 2024-11-12 17:27:02
オリジナル
546 人が閲覧しました

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

皆さん、こんにちは。この記事では、Express-Validator をミドルウェアとして設定する方法を学びます。また、check メソッドと body メソッドの適切な使用例について詳しく説明します。エクスプレスバリデータ。
Express-validator は、Express アプリケーションの入力を検証およびサニタイズするための強力なライブラリです。受信データが特定の要件を満たしていることを確認するために使用できる、堅牢な検証およびサニタイズ機能のセットを提供します。このドキュメントでは、検証ミドルウェアのセットアップ手順を説明し、検証のためのチェック メソッドとボディ メソッドの主な違いを説明します。

express-validator をインストールした後、以下の手順に従います

検証ルールの設定

body() または check() を使用して検証ルールを設定できます。

  • check(): リクエストのさまざまな部分 (req.body、req.query、req.params など) のデータをチェックできる柔軟なバリデータです。
  • body(): req.body.
  • 内のデータの検証に特に焦点を当てた、よりターゲットを絞ったバリデーターです。
  • validationResult(): ミドルウェア関数で検証結果を取得して処理します。

検証ミドルウェアの定義

検証を再利用可能にし、ルートをクリーンに保つには、ミドルウェア関数で検証ルールを定義します。以下は、電子メール フィールドとパスワード フィールドをチェックするユーザー登録ルートのミドルウェア関数の例です。

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(); 
    }
];
ログイン後にコピー
ログイン後にコピー

ルートでのミドルウェアの使用

検証ミドルウェアを定義したら、受信リクエストを処理するルートでそれを使用します。これにより、検証がルート ロジックから分離されます。

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');
});
ログイン後にコピー
ログイン後にコピー

仕組み

  • 検証ルールの定義: check() または body() を使用して、各フィールドの検証要件 (長さや形式など) を指定します。
  • エラーの確認: validationResult() を使用して、検証エラーが存在するかどうかを確認します。エラーが見つかった場合は、ステータス コード 400 とともにクライアントに返されます。
  • 続行: エラーが見つからない場合は、next() が呼び出され、ルート ハンドラー ロジックまたは次のミドルウェアに進みます。

これで、/register へのリクエストはすべて、登録ロジックが実行される前に validateRegistration のルールに従って検証されます。

詳細な比較: 小切手と本体

check() と body() は両方とも、受信データの検証ルールを定義する Express-validator 内の関数です。ただし、リクエスト内のデータを検索する場所と、通常の使用方法が異なります。

  • check()
  1. スコープ: 汎用バリデーター。
  2. 検証領域: 複数のリクエスト部分 (req.body、req.query、req.params など) にわたるデータをチェックできます。
  3. 一般的な使用例: リクエストに応じて URL、クエリ文字列、または本文にフィールドが存在する場合など、柔軟性が必要な場合に役立ちます。

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(); 
    }
];
ログイン後にコピー
ログイン後にコピー

ここで、check('email') は、req.body、req.query、req.params を含むリクエストのすべての部分で電子メール フィールドを検索します。

  • body()
  1. スコープ: 特に req.body をターゲットとします。
  2. 検証領域: リクエストの本文のみを参照するため、本文内にデータを運ぶリクエスト (POST、PUT、PATCH リクエストなど) に最適です。
  3. 一般的な使用例: データがリクエスト本文にのみ含まれることがわかっている、フォーム送信または JSON ペイロードを処理する場合に推奨されます。

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');
});
ログイン後にコピー
ログイン後にコピー

ここで、body('email') は req.body 内の電子メール フィールドのみをチェックするため、req.query または req.params にある場合は検出されません。

それぞれをいつ使用するか

  • check(): URL パラメーター、クエリ文字列、本文など、データの場所が異なる可能性がある場合。
  • body(): req.body 内のデータの検証のみに興味がある場合。これは、フォーム データまたは JSON ペイロードを受け入れる API で一般的です。

両方を使用した例
同じ検証配列で check() と body() の両方を使用して、リクエストのさまざまな部分からのデータを処理できます。

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

ログイン後にコピー

この例では:
body('email') はリクエスト本文内の電子メールのみを検証します。
check('token') は、req.body、req.query、および req.params にわたってトークンを検索します。

結論

この方法で Express-validator を使用すると、検証がクリーンで管理しやすく、さまざまな入力形式やソースを処理できる柔軟性が維持され、アプリケーションのデータの整合性とセキュリティを確保できます。

以上がExpressアプリのミドルウェアとしてexpress-validatorを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート