首页 > 其他分享 >Express的使用笔记8 引入验证中间件来给表单添加验证规则~

Express的使用笔记8 引入验证中间件来给表单添加验证规则~

时间:2024-11-18 17:58:28浏览次数:1  
标签:express const 验证 Express 中间件 errors user router userCtrl

前面已经将数据成功写入了数据库了,接下来就开始探讨接口传递参数的校验咯~
自己封装虽然灵活,但也常常架不住有现成的,既灵活又方便,比如:express-valiation
官方文档地址: https://express-validator.github.io/docs/guides/schema-validation

  1. 先安装咯! npm i express-valiation
  2. 引入开始用~
    在我们的router/user.js中
const express = require("express");
const router = express.Router();
router.use(express.json());
const { body, validationResult } = require("express-validator"); //引入
const userCtrl = require("../controller/user");
// 用户登录
router.post("/users/login", userCtrl.login);
// 用户注册
router.post(
  "/users",
  [body("user.username").notEmpty().withMessage("用户名不能为空")],  //数组里面写要校验的内容
  (req, res, next) => {          //修改报错的提示,如果没有这个函数的话,报错的展示的结构和内容就不太一样
    const errors = validationResult(req);   
    if(!errors.isEmpty()){
        return res.status(400).json({errors:errors.array()})
    }
    next()
  },
  userCtrl.register
);
// 获取当前登录用户
router.get("/user", userCtrl.getCurUser);
// 更新当前登录用户
router.put("/user", userCtrl.updateCurUser);

module.exports = router;

加入前的报错:

加入后的报错:

3.接下来就是升级版的使用了,上面都是调用已有的方法,如果要自定义规则,可以使用custom()函数,以此类推,可以给表单中更多的字段添加校验规则
下面的demo设置自定义规则:邮箱不允许重复

const {User} = require("../model");//这个是我们之前配置的参数字段

router.post(
  "/users",
  [
    body("user.username").notEmpty().withMessage("用户名不能为空"),
    body("user.email").notEmpty().withMessage("邮箱不能为空")
    .isEmail().withMessage("邮箱的格式不准确")
    .bail()
    .custom(
        async email=>{
            const user = await User.findOne({email}); //findOne查询是否唯一
            if(user){
                return Promise.reject('邮箱已存在')
            }
        }
    )
  ],
  (req, res, next) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) {
      return res.status(400).json({ errors: errors.array() });
    }
    next();
  },
  userCtrl.register
);

标签:express,const,验证,Express,中间件,errors,user,router,userCtrl
From: https://www.cnblogs.com/jocelyn11/p/18552957

相关文章

  • 【验证码逆向专栏】vaptcha 手势验证码逆向分析
    逆向目标目标:vaptcha手势验证码网站:aHR0cHM6Ly93d3cudmFwdGNoYS5jb20vI2RlbW8=抓包分析抓包分析,首先是vaptcha-demo接口:这个接口返回了验证码类型,其中embed的值就是嵌入式点击验证码,其他三个分别对应三种类型。再看下面这个接口:目前猜测是请求或配置某些静态资源。......
  • 界面控件DevExpress WinForms v24.2新功能预览 - 支持.NET 9
    DevExpressWinForms 拥有180+组件和UI库,能为WindowsForms平台创建具有影响力的业务解决方案。DevExpressWinForms能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任!获取DevExpressWinFormsv24.1正式版下载DevEx......
  • 形式验证和符号推理
    符号推理,简单调研一下符号vs模拟形式验证和UVM验证方法本质出发点是不同的,一个基于符号逻辑推理,另一个基于模拟器。比如有组合电路A和组合电路B,要验证他们逻辑功能一致,即真值表一致。⚠️以下内容有猜测部分,待调研工具具体实现补充基于模拟器:生成所有输入的可能组......
  • go fiber:全局中间件添加排除的path
    一,代码:全局中间件对所有的api生效,如果有个别不想应用全局中间件的api,则需要从代码中进行排除:例如:支付宝或微信的回调接口packagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2""regexp")funcApiSign(c*fiber.Ctx)error{//得到当前url ......
  • go fiber: 多个全局中间件的执行顺序
    一,代码:middleware.gopackagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2")funcMiddle1(c*fiber.Ctx)error{ fmt.Println("middle1before") err:=c.Next() fmt.Println("middle1after") returnerr}......
  • go fiber:路由中间件
    一,目录结构:二,代码1,中间件代码packagemiddlewareimport( "fmt" "github.com/gofiber/fiber/v2" "industry/config")//token校验funcCheckUser(c*fiber.Ctx)error{ token:=c.Query("token") fmt.Println("token:"......
  • 基于YOLO实现滑块验证码破解
    申明:本案例中的思路和技术仅用于学习交流。请勿用于非法行为。一、训练模型详细训练步骤和导出模型参考滑块验证码识别模型训练二、模型试用通过YoloDotNet运行模型,计算出滑块缺口位置后用RESTful格式的接口返回坐标给其它应用调用。YoloDotNet案例参考 物体检测框架YoloDot......
  • 手机验证码漏洞挖掘(任意手机号注册,任意用户密码重置等等)
    一.短信验证码爆破漏洞挖掘1.漏洞原理服务端未对验证时间,次数做出限制,存在爆破的可能性。简单的系统可以直接爆破,但做过一些防护的系统还得进行一些绕过进行爆破。对与4位验证码:0000~9999的10000次,五分钟之内。对于6位验证码:1000000位,五分钟之内跑不完。2.爆破方法(没有次......
  • 使用 Tcl 实现滑动验证码识别
    滑动验证码是一种常见的验证方式,用于验证用户操作的真实性。以下是使用Tcl实现滑动验证码识别的简单示例。功能概述程序的主要功能包括:读取滑动验证码的图片。分析滑块与缺口位置。模拟滑块移动,完成验证。代码实现tcl引入必要的库packagerequireImgpackagerequire......
  • 使用 Chapel 实现滑动验证码识别
    滑动验证码识别是一种基于图像处理的技术,用于识别滑块的缺口位置。本篇文章将演示如何使用Chapel语言实现一个简单的滑动验证码识别程序。Chapel简介Chapel是一种并行编程语言,适合数据密集型计算任务。我们可以利用其强大的数组和数据处理能力完成图像分析。环境准备安装Ch......