zoukankan      html  css  js  c++  java
  • 使用Joi来验证数据模型

    Joi模块简介
    我们用nodejs实现一些功能时,往往需要对用户输入的数据进行验证。然而,验证是一件麻烦的事情,很有可能你需要验证数据类型,长度,特定规则等等,在前端做表单验证时,我们常用的做法是使用正则,正则表达式也许可以一步到位,但是他只会给你true or false,如果想要知道数据不符合哪些条件时,那么你要进一步判断,下面和大家分享一种可读性和易用性更好的实现方法。

    Joi 是 hapijs 自带的数据校验模块,他已经高度封装常用的校验功能,JavaScript对象的规则描述语言和验证器。是本文就是介绍如何优雅地使用 joi 对数据进行校验。相信你会喜欢上它。

    Joi模块基础使用
    // 引入joi模块
    const Joi = require('joi');
    
    // 定义对象的验证规则
    const schema = {
        username: Joi.string().min(2).max(5).required().error(new Error('username属性没有通过验证')),
        birth: Joi.number().min(1900).max(2020).error(new Error('birth没有通过验证'))
    };
    
    async function run () {
        try {
            // 实施验证
            await Joi.validate({username: 'ab', birth: 1800}, schema);
        }catch (ex) {
            console.log(ex.message);
            return;
        }
        console.log('验证通过')
        
    }
    
    run();

    这种极简易读的表达方式让你轻松快速实现校验功能,不需要 if else。这就是配置大于编码的魅力。

    Joi模块更多使用方式

    joi 不仅仅作用于scheme对象,而且还可以单独使用,比如:

    Joi.string().validate(666666);  //error: ValidationError: "value" must be a string
    Joi.string().validate('hehe'); // pass
    

    有时一些意外的字段被传进来,会导致校验不通过,但你又不在乎这些多余的字段,可以这样配置:

    Joi.validate({y: 3}, {x: Joi.string()}); // [ValidationError: "y" is not allowed]
    Joi.validate({y: 3}, {x: Joi.string()}, {allowUnknown: true}); // pass, 配置 {allowUnknown: true}
    

    除了表单常用的数值,布尔类型等,也可以校验函数类型:

    var myObject = {
        a: 123,
        b: function () { }
    }
    
    var schema = {
      a: Joi.number().integer(),
      b: Joi.func()
    }
    
    Joi.validate(myObject, schema);
    //pass
    

      

  • 相关阅读:
    oo第八次作业--5,6,7次作业总结
    OO前三次作业总结
    软工总结
    黄衫感想博客
    软工结对编程博客
    软工第一次阅读
    软工第0次作业
    OO第四次博客
    OO第三次博客
    OO第二次博客
  • 原文地址:https://www.cnblogs.com/crazy-rock/p/14956367.html
Copyright © 2011-2022 走看看