首页 > web前端 > js教程 > 如何在 Express App 中使用express-validator作为中间件

如何在 Express App 中使用express-validator作为中间件

Mary-Kate Olsen
发布: 2024-11-12 17:27:02
原创
633 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板