首頁 > web前端 > js教程 > 主體

如何在 Express App 中使用express-validator作為中介軟體

Mary-Kate Olsen
發布: 2024-11-12 17:27:02
原創
546 人瀏覽過

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

大家好,在本文中,我們將學習如何將快速驗證器設定為中間件,我們還將深入探討check 和body 方法的正確用例的詳細資訊快速驗證器。
express-validator 是一個強大的程式庫,用於驗證和清理 Express 應用程式中的輸入。它提供了一組強大的驗證和清理功能,可用於確保傳入資料符合特定要求。本文檔將指導您設定驗證中間件,並說明驗證的 check 和 body 方法之間的主要差異。

安裝完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 中的函數,用來定義傳入資料的驗證規則。但是,它們在請求中查找資料的位置以及通常使用方式方面有所不同。

  • 檢查()
  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') 會在請求的所有部分查找 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 中的 email 字段,因此不會檢測它是否在 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 中搜尋 token。

結論

以這種方式使用快速驗證器可以使驗證保持乾淨、可管理且足夠靈活,以處理各種輸入格式和來源,幫助確保應用程式中的資料完整性和安全性。

以上是如何在 Express App 中使用express-validator作為中介軟體的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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