egg中使用validate自定义校验对请求参数进行校验

news/2024/7/10 2:19:53 标签: vue, node

官方介绍
gitHub地址

  • 在获取到用户请求的参数后,不可避免的要对参数进行一些校验。
  • 插件下载
npm i egg-validate --save
  • config/plugin.js配置
exports.validate = {
  enable: true,
  package: 'egg-validate',
};
  • config.default.js
  config.validate = {
    // 配置参数校验器,基于parameter
    convert: true, // 对参数可以使用 convertType 规则进行类型转换
    // validateRoot: false,   // 限制被验证值必须是一个对象。
    widelyUndefined: true
  }
  • convert会对入参进行转换,建议开启。举个例子,使用表单中默认的 submit 类型按钮提交表单时,提交过来的往往是序列化后的字符串,那些期望是数字类型的字段就会始终验证不过。而开启此项后,会对入参按希望的类型进行转换。
  • widelyUndefined 开启后,会把空字符串,NaN,null 这些转成 undefined,将这些异常的数据进行了统一,方便后续处理。
  • 新建文件 app/validate/user.js文件夹
'use strict'

module.exports = app => {
  const { validator } = app
  // 自定义校验规则
  validator.addRule('userName', (rule, value) => {
    if (value.length < 8 || value.length > 20) {
      return '用户名的长度应该在8-20之间'
    }
  })
  validator.addRule('note', (rule, value) => {
    if (value.length > 100) {
      return '备注不超过100字'
    }
  })
  validator.addRule('email', (rule, value) => {
    const re = RegExp(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/)
    if (!re.test(value)) {
      return '邮箱格式不正确'
    }
  })
  validator.addRule('phone', (rule, value) => {
    const reg = /^1[3|4|5|6|7|8][0-9]\d{8}$/
    if (!reg.test(value)) {
      return '手机号格式不正确'
    }
  })
}

  • 启动时载入校验规则 app.js文件(没有则在根目录新建一个)
'use strict';

const path = require('path');

module.exports = app => {
  // 加载所有的校验规则
  const directory = path.join(app.config.baseDir, 'app/validate');
  app.loader.loadToApp(directory, 'validate');
};

  • 使用controller中
  async login() {
    const { ctx, service, app } = this
    ctx.validate({
      userName: { type: 'userName' }
    })
    const { userName, passWord } = ctx.request.body
    const params = { passWord, userName }
    app.logger.warn('111111133', ctx.request.body)
    const res = await service.baseService.userService.login(params)
    ctx.body = res
  }

在这里插入图片描述

  • 首先判断这个userName有没有在ctx.request.body里面,没有就跑出参数不存在、然后是userName不能为空、然后得是去app/validate/user.js去找对应的自定义规则。有一个不符合都会抛出错误。
  • 默认校验的是ctx.request.body的参数。
  • 另外一种写法
let errs = app.validator.validate({ userName: ‘string‘ }, ctx.request.body);

ctx.validate检验不通过会抛出异常,而app.validator.validate检验不通过会返回错误。你可以自己选择要对这个错误怎么处理,是不管呢还是返回前端
在这里插入图片描述


http://www.niftyadmin.cn/n/1161952.html

相关文章

自适应和响应式布局的区别

白话分析自适应跟响应式的区别 前端响应式布局原理与方案&#xff08;详细版&#xff09; 自适应布局 就是让一个网站在不同大小的设备上呈现显示同一样的页面&#xff0c;让同一个页面适应不同大小屏幕&#xff0c;根据屏幕的大小&#xff0c;自动缩放。自适应虽然成为网页设…

Mac电脑安装brew

brew官网 终端运行: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"报错 curl: (35) LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to raw.githubusercontent.com:443 解决:使用国内镜像源 /bin/…

Mac电脑使用brew 下载mysql

brew search mysql 搜索一下版本&#xff0c;看一下自己要下载的版本这俩我下载的是 brew install mysql5.7下载成功 brew会给配置环境变量的提示 echo export PATH"/usr/local/opt/mysql5.7/bin:$PATH" >> ~/.zshrcexport LDFLAGS"-L/usr/local/opt/mys…

Mac电脑brew配置java8

下载 brew install openjdk8下载完brew会给出配置环境变量的提示&#xff0c;按照提示配置环境变量,也就是执行下面这两句脚本 echo export PATH"/usr/local/opt/openjdk8/bin:$PATH" >> ~/.zshrc export CPPFLAGS"-I/usr/local/opt/openjdk8/include&q…

vue中PC端,移动端,H5使用lib-flexible(rem)做适配

lib-flexible源码读后感 手把手教你vue-cli3搭建项目实现移动端自适应----- flexible和 postcss-px2rem PC端,移动端如何使用rem 需求&#xff1a;公司大屏项目需要使用自适应&#xff0c;有的屏幕分辨率是1920X1080&#xff0c;有的是3840X1080等等。想让项目能尽量的适应大屏…

transform的scale属性实现对大屏的适配

最近公司做的大屏用到了transform的scale属性来对大屏网页,进行缩放。缺点&#xff1a;需要给项目大屏&#xff0c;设定固定的宽高&#xff0c;当使用的屏幕分辨率和项目不一致时&#xff0c;会出现左右或者上下的留白。如果设计稿是1920*1080的尺寸&#xff0c;项目中用px来写…

vue项目使用externals优化打包体积

查看打包体积 下载查看打包体积的插件 npm install webpack-bundle-analyzer -save-dev在vue.config.js中配置 chainWebpack: config > {// 打包结果分析if (process.env.NODE_ENV "development") {config.plugin("webpack-bundle-analyzer").use(re…

电视端TV网页开发总结

最近公司接了电视项目&#xff0c;需要开发一个网页&#xff0c;嵌入到电视机顶盒中。技术栈&#xff1a;jqueryrequirejshbs模板引擎广电给寄来的电视机顶盒版本是安卓比较低的版本&#xff0c;所以一些新的技术在电视机顶盒中是不兼容的&#xff0c;所以技术选型这块选择了jq…