大家好,在本文中,我们将学习如何将快速验证器设置为中间件,我们还将深入探讨 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中文网其他相关文章!