大家好,在本文中,我們將學習如何將快速驗證器設定為中間件,我們還將深入探討check 和body 方法的正確用例的詳細資訊快速驗證器。
express-validator 是一個強大的程式庫,用於驗證和清理 Express 應用程式中的輸入。它提供了一組強大的驗證和清理功能,可用於確保傳入資料符合特定要求。本文檔將指導您設定驗證中間件,並說明驗證的 check 和 body 方法之間的主要差異。
安裝完express-validator後,請依照下列步驟操作
您可以使用 body() 或 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(); } ];
定義驗證中間件後,在處理傳入請求的路由中使用它。這使得驗證與路由邏輯分開。
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'); });
現在,任何對 /register 的請求都將在註冊邏輯執行之前根據 validateRegistration 中的規則進行驗證。
check() 和 body() 都是express-validator 中的函數,用來定義傳入資料的驗證規則。但是,它們在請求中查找資料的位置以及通常使用方式方面有所不同。
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() 的用法範例
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() 和 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中文網其他相關文章!