前言
Joi是一个强大的数据验证库,常用于校验 JSON 数据是否符合预期的结构和格式。
因为这个库非常符合人类的直觉,所以直接上代码就完事了,这边不多介绍了,你包能看得懂的。
快速入门 Joi 示例代码
示例 1:校验名字和年龄
const Joi = require('joi');
// 定义数据结构
const userSchema = Joi.object({
name: Joi.string().alphanum().min(3).max(30).required(), // 名字必须是字母或数字,长度在3到30之间
age: Joi.number().integer().min(0).max(120).required() // 年龄必须是整数,范围在0到120之间
}).options({
abortEarly: false, // 返回所有错误,而不是第一个错误
allowUnknown: false // 不允许未知字段
});
// 测试数据
const userData = {
name: 'jjq',
age: 23
};
// 校验数据
const { error } = userSchema.validate(userData);
if (error) {
console.error('校验失败:', error.details);
} else {
console.log('校验成功:', userData);
}
示例 2:校验邮箱和电话号码
const Joi = require('joi');
// 定义数据结构
const contactSchema = Joi.object({
email: Joi.string().email().required(), // 邮箱必须是有效的邮箱格式
phone: Joi.string().length(11).pattern(new RegExp(/^1[3-9]\d{9}$/)).required() // 电话号码必须是11位,且符合中国大陆手机号格式
}).options({
abortEarly: false,// 返回全部的错误
allowUnknown: false// 不允许未知字段
});
// 测试数据
const contactData = {
email: 'jjq@example.com',
phone: '666888'
};
// 校验数据
const { error } = contactSchema.validate(contactData);
if (error) {
console.error('校验失败:', error.details);
} else {
console.log('校验成功:', contactData);
}
示例 3:校验自定义规则(如用户名和密码)
const Joi = require('joi');
// 定义数据结构
const authSchema = Joi.object({
username: Joi.string().alphanum().min(5).max(20).required(), // 用户名必须是字母或数字,长度在5到20之间
password: Joi.string().pattern(new RegExp('^[a-zA-Z0-9]{6,20}$')).required() // 密码必须是字母或数字,长度在6到20之间
}).options({
abortEarly: false,
allowUnknown: false
});
// 测试数据
const authData = {
username: 'jjqdemo',
password: 'pwdpwdpwd'
};
// 校验数据
const { error } = authSchema.validate(authData);
if (error) {
console.error('校验失败:', error.details);
} else {
console.log('校验成功:', authData);
}
示例 4:校验数组和嵌套对象
const Joi = require('joi');
// 定义数据结构
const complexSchema = Joi.object({
name: Joi.string().required(),
age: Joi.number().integer().min(0).max(120).required(),
hobbies: Joi.array().items(Joi.string().required()), // 爱好必须是字符串数组
address: Joi.object({
city: Joi.string().required(),
zipCode: Joi.string().length(6).required() // 邮编必须是6位
}).required()
}).options({
abortEarly: false,
allowUnknown: false
});
// 测试数据
const complexData = {
name: 'jjq',
age: 23,
hobbies: ['唱', '跳', 'rap'],
address: {
city: '深圳',
zipCode: '666666'
}
};
// 校验数据
const { error } = complexSchema.validate(complexData);
if (error) {
console.error('校验失败:', error.details);
} else {
console.log('校验成功:', complexData);
}
总结
重点记住下面几个操作
- 创建
schema:
const schema = Joi.object({
name: Joi.string()
})
- 校验:
let obj = {"name":"jjq"}
let { error } = schema.validate(obj)
if (error) {
// 校验失败
} else {
// 校验成功
}
主要就是这两个内容
下次见!🫏