关于 joi
joi 是面向开发者的 JavaScript 模式验证技能,用于验证输入并组合结构化规则。内容涵盖内置类型、条件模式、跨字段引用、自定义扩展和错误处理。
主要功能
- 01使用 validate() 和 attempt() 验证模式
- 02组合对象、数组和 alternatives 模式
- 03使用 .when() 设置条件规则
- 04使用 Joi.ref() 引用其他字段
- 05通过 Joi.extend() 创建自定义类型
- 06自定义验证错误消息
适用场景
- 01在应用边界验证数据
- 02根据另一字段的值检查字段
- 03确保确认字段与原字段一致
- 04添加领域专用的验证类型
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ damusix/ skills --skill joi安装后在 Claude Code 中输入/joi确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.tessl-plugin/plugin.jsonreference/any.mdconditionals.mderrors.mdextensions.mdmetadata.mdreferences.mdtesting.mdtypes.mdvalidation.md详细介绍
Joi
快速入门
const Joi = require('joi');
const schema = Joi.object({
name: Joi.string().min(1).max(100).required(),
age: Joi.number().integer().min(0),
email: Joi.string().email()
});
const { error, value } = schema.validate(input);
关键规则
- 架构不可变 - 每个方法都会返回一个新的架构实例;切勿修改
- 在边界处验证 - 在输入边界使用
validate()或attempt();参见验证 - 类型继承基类 - 所有类型都继承自
any();参见类型概览 - 使用引用跨字段取值 - 使用
Joi.ref()在多个字段间动态取值;参见引用 - 通过扩展创建自定义类型 - 使用
Joi.extend()创建自定义类型;参见扩展
工作流
- 选择类型 - 查看类型概览,了解所有内置类型
- 添加约束 - 链式调用
.min()、.max()、.pattern()、.valid()等规则 - 组合架构 - 嵌套使用
Joi.object()、Joi.array()、Joi.alternatives() - 添加条件 - 使用
.when()创建动态架构;参见条件 - 自定义错误 - 通过
.messages()或.error()覆盖消息;参见错误
常见模式
使用 .when() 进行条件验证
const schema = Joi.object({
type: Joi.string().valid('email', 'sms').required(),
address: Joi.when('type', {
is: 'email',
then: Joi.string().email().required(),
otherwise: Joi.string().pattern(/^\+?[1-9]\d{1,14}$/).required()
})
});
使用 Joi.ref() 进行跨字段引用
const schema = Joi.object({
password: Joi.string().min(8).required(),
confirmPassword: Joi.string().valid(Joi.ref('password')).required()
.messages({ 'any.only': 'passwords must match' }),
startDate: Joi.date().required(),
endDate: Joi.date().greater(Joi.ref('startDate')).required()
});
关键模式
| 主题 | 参考 |
|---|---|
| 所有内置类型 | 类型 |
| 验证与选项 | 验证 |
| 引用与模板 | 引用 |
| 条件架构 | 条件 |
| 错误处理 | 错误 |
| 自定义扩展 | 扩展 |
| 元数据与自省 | 元数据 |
| 常用方法(any) | any |
| 测试模式 | 测试 |
评论
支持 Markdown