egg validate验证插件的使用,以及定制

1,使用

安装egg-validate

yarn add egg-validate

2,配置

先启用: 

config/plugin.ts

const plugin: EggPlugin = {
    // ...
    validate: {
        enable: true,
        package: 'egg-validate',
    },
    // ...
};

export default plugin;

 再配置:

 config/config.default.ts

export default (appInfo: EggAppInfo) => {
  const config = {} as PowerPartial<EggAppConfig>;

  // ...
  config.validate = {
    convert: true,
    widelyUndefined:true
  };

  // ...
};

其配置项为 node-modules/parameter 的所有可用配置项,因为该插件其实就是后者的 Egg.js 封装。

  • convert会对入参进行转换,建议开启。举个例子,使用表单中默认的 submit 类型按钮提交表单时,提交过来的往往是序列化后的字符串,那些期望是数字类型的字段就会始终验证不过。而开启此项后,会对入参按希望的类型进行转换。
  • widelyUndefined 开启后,会把空字符串,NaN,null 这些转成 undefined,将这些异常的数据进行了统一,方便后续处理。

 3,自定义校验规则:

 app/validate/user.ts

module.exports = app => {

  const { validator } = app;

  // 校验用户名是否正确
  validator.addRule('userName', (rule, value) => {
    console.log('校验用户名', rule, value);
    if (/^\d+$/.test(value)) {
      return '用户名应该是字符串';
    } else if (value.length < 6 || value.length > 20) {
      return ('用户名的长度应该在6-20之间');
    }
  });
};

4,启动时载入规则

app.ts

const path = require('path');
module.exports = app => {
  ...
  // 导入验证规则
  const directory = path.join(app.config.baseDir, 'app/validate');
  app.loader.loadToApp(directory, 'validate');
};

5,使用

在controller中使用刚才自定义的方法

public async create() {
    const { ctx } = this;
    console.log(ctx.request.body);
    try {
      ctx.validate({ name: 'userName' });
    } catch (error) {
      ctx.body = error;
      return;
    }
    ctx.body = `创建:${ctx.params.id || 1}`;
  }

 如果出现以下结果,说明验证可行

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 VeeValidate 2.2.5,可以使用 `confirmed` 规则来验证两个表单字段是否匹配,可以用于验证选择框(`<select>`)的值。例如,如果需要验证两个选择框的值是否相同,可以按照以下方式使用 `confirmed` 规则: ```html <template> <div> <select v-model="selected1"> <option value="">请选择选项 1</option> <option value="1">选项 1</option> <option value="2">选项 2</option> </select> <select v-model="selected2"> <option value="">请选择选项 2</option> <option value="1">选项 1</option> <option value="2">选项 2</option> </select> <button @click="submitForm">提交</button> </div> </template> <script> export default { data() { return { selected1: '', selected2: '' } }, methods: { submitForm() { this.$validator.validateAll().then(result => { if (result) { alert('验证通过') } }) } }, mounted() { // 添加验证规则 this.$validator.extend('confirmed', { validate: (value, { confirmed }) => value === confirmed, params: ['confirmed'] }) // 添加验证规则的错误提示信息 this.$validator.localize('en', { messages: { confirmed: 'The :attribute confirmation does not match.' }, attributes: { selected2: '选项 2' } }) } } </script> ``` 在以上示例中,我们使用 `v-model` 指令将选择框的值绑定到 `selected1` 和 `selected2` 变量上,并在点击提交按钮时,使用 `validateAll` 方法对表单进行验证。同时,我们使用 `extend` 方法添加了一个新的验证规则 `confirmed`,并使用 `localize` 方法添加了对应的错误提示信息。在 `localize` 方法中,我们将 `selected2` 映射为中文名称 "选项 2",以便在错误提示信息中显示更为友好的提示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值