joi模块验证的介绍与使用——一种基于schema的nodejs的对象校验,简单易用

joi是Node.js中的一个对象校验模块,提供了一种基于schema的约束描述语言,使得对象校验变得简单。它可以定义字段类型、长度、是否必填等规则,并支持与其他字段的关联校验。例如,username字段要求为字母数字,长度在3-30之间且必填,password需匹配特定正则,access_token可选,birthyear是1900-1994之间的整数,email需为邮箱地址。校验分为定义schema和执行校验两个步骤,通过schema.validate()方法进行验证。joi模块默认字符串编码为utf-8。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        joi是nodej的一个工具模块,主要用于JavaScript对象的校验。它是一种简单易用的javacript对象约束描述语言,可以轻松解决nodejs开发中的各种参数的校验。

详细资料见 https://github.com/hapijs/joi/tree/v10.5.0

        nodejs引入: 

const Joi = require('joi');

       开时使用:

const schema = Joi.object().keys({
    username: Joi.string().alphanum().min(3).max(30).required(),
    password: Joi.string().regex(/^[a-zA-Z0-9]{3,30}$/),
    access_token: [Joi.string(), Joi.number()],
    birthyear: Joi.number().integer().min(1900).max(2013),
    email: Joi.string().email()
}).with('username', 'birthyear').without('password', 'access_token');


const result = Joi.validate({ username: 'abc', birthyear: 1994 }, schema);
//result --> { error: null, value: { username: 'abc', birthyear: 1994 } }
//result.error === null, 说明校验通过 ,result.value校验的对象

//也可以使用回调函数,异步获取校验结果,
Joi.validate({ username: 'abc', birthyear: 1994 }, schema, function (err, value) { 

});

     上面的例子定义了一个schema,包含的意思如下:

  •      username 

              Joi.String() -- 定义类型必须是字符串类型

              .alphanum() -- 定义必须包含字母或数字

              .min(3).max(30) -- 定义字段长度3-30

              .required() -- 定义必修字段

              .with('username','birthyear') -- 校验对象字段必须和birthyear同时存在

  • password

              .regex(/^[a-zA-Z0-9{3-30}$/) -- 定义字段必须匹配正则规则。

              .without('password','access_token') -- 校验对象中,'password'与'access_token'不同是存在

  • access_token

              .[Joi.string(),Joi.number()] -- 定义字段类型为数字类型或字符串类型

              没有.required()约束 -- 定义字段为可选字段

  •  birthyear

               .Joi.number().integer() -- 定义字段为数字整型

               .min(1900).max(1994) -- 定义字段值范围在1900-1994

  • email

               .email() -- 定义字段为邮箱地址

     用法

 使用分两步完成 第一步使用joi提供的类型与约束定义一个schema      

const schema = {
    a: Joi.string()
};

        注意:joi schema对象是不可变,这意味着每增加一条规则(e.g. .min(5))将会返回一个新的schema对象。

第二步 通过定义的schema完成值的校验

const {error, value} = Joi.validate({ a: 'a string' }, schema);

// or

Joi.validate({ a: 'a string' }, schema, function (err, value) { });

如果输入的值校验有效,则err===null 否则将会返回错误对象

schema可以使用普通的JavaScript对象,其中对象的字段关联joi类型来定义。也可以直接使用一个joi类型定义

const schema = Joi.string().min(10);

如果schema是直接使用joi类型定义 ,则可以直接使用schema.validate(value,callback)验证。如果是一个非joi类型对象的定义的shema ,实质joi模块会转换成object() 类型,等同如下:

const schema = Joi.object().keys({
    a: Joi.string()
});

 

  • joi模块的字符串编码默认为utf-8
  • 详细API见API Reference.

    原创,转载请注明出处。

 

转载于:https://my.oschina.net/jtyl/blog/905440

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值