Joi 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Joi 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
Joi 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」 !
Joi 获得 2020 年度 OSC 中国开源项目评选「最佳人气项目」「最积极运营项目」 !
Joi 获得 2020 年度 OSC 中国开源项目评选「最积极运营项目」 !
授权协议 未知
开发语言 JavaScript TypeScript
操作系统 跨平台
软件类型 开源软件
开源组织
地区 不详
投 递 者 白开水不加糖
适用人群 未知
收录时间 2021-09-08

软件简介

Joi 是用于 JavaScript 的强大的模式描述语言和数据验证器,让你可以使用简单、直观且可读的语言来描述数据。

示例:

const Joi = require('joi');

const schema = Joi.object({
    username: Joi.string()
        .alphanum()
        .min(3)
        .max(30)
        .required(),

    password: Joi.string()
        .pattern(new RegExp('^[a-zA-Z0-9]{3,30}$')),

    repeat_password: Joi.ref('password'),

    access_token: [
        Joi.string(),
        Joi.number()
    ],

    birth_year: Joi.number()
        .integer()
        .min(1900)
        .max(2013),

    email: Joi.string()
        .email({ minDomainSegments: 2, tlds: { allow: ['com', 'net'] } })
})
    .with('username', 'birth_year')
    .xor('password', 'access_token')
    .with('password', 'repeat_password');


schema.validate({ username: 'abc', birth_year: 1994 });
// -> { value: { username: 'abc', birth_year: 1994 } }

schema.validate({});
// -> { value: {}, error: '"username" is required' }

// Also -

try {
    const value = await schema.validateAsync({ username: 'abc', birth_year: 1994 });
}
catch (err) { }
展开阅读全文

代码

的 Gitee 指数为
超过 的项目

评论 (0)

加载中
更多评论
暂无内容
发表了博客
2019/03/28 22:05

省选前的JOI

RT,发现找不到题,于是又开了新坑 JOI特色:重思考,代码难度(相比NOI系列)基本没有 (省选前到处挖坑2333) JOI 2017 Final 焚风现象 差分,莫得了 (不是看到200ms就tm线段树去了 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 const int N=100005; 6 long long ans,dif[N]; 7 int n,m,s,t,t1,t2,t3,rd,lst; 8 int main() 9 { 10 scanf("%d%d%d%d",&n,&m,&s,...

0
0
发表了博客
2018/07/29 18:27

joi库 学习笔记

零、背景 node.js 应用中,req.query / req.body 传来的参数需要做 valication( 合法性验证 ) 一、安装 https://github.com/hapijs/joi npm i joi --save const Joi = require('Joi'); 二、基本用法 Joi.validate(value, schema, [options]); 1、通过验证 这里我们定义了三个字段:name(姓名)、age(年龄)、sex(性别) router.post('/create', function (req, res, next) { const schema = Joi.object().keys({ ...

0
0
发表了博客
2018/09/21 14:49

「JOI 2017 Final」JOIOI 王国

「JOI 2017 Final」JOIOI 王国 题目描述 题目译自 JOI 2017 Final T3「 JOIOI 王国 / The Kingdom of JOIOI」 JOIOI 王国是一个 HHH 行 WWW 列的长方形网格,每个 1×11\times 11×1 的子网格都是一个正方形的小区块。为了提高管理效率,我们决定把整个国家划分成两个省 JOI 和 IOI 。 我们定义,两个同省的区块互相连接,意为从一个区块出发,不用穿过任何一个不同省的区块,就可以移动到另一个区块。有公共边的区块间可以任意...

0
0
发表了博客
2019/02/26 17:31

「JOI 2016 Final」断层

嘟嘟嘟 </br> 今天我们模拟考这题,出的是T3。实在是没想出来,就搞了个20分暴力(还WA了几发)。 这题关键在于逆向思维,就是考虑最后的$n$的个点刚开始在哪儿,这样就减少了很多需要维护的东西。 这就让我想到很久以前的一道NOIP题,铺地毯。那是我第一次接触逆向思维,觉得十分的巧妙,原本要写的很麻烦或者干脆写不出来的题,反着想,竟然几行就完事了。 不扯别的了,还是说一下这题怎么想吧…… </br> 把操作离线,然后倒着...

0
0
发表了博客
2019/07/19 15:45

loj2336. 「JOI 2017 Final」绳

题意 折一根绳子,绳子上的每一段有颜色和厚度(初始都是1),每次要求折叠部分每段颜色对应相同,每次折叠后厚度叠加。修改一段颜色的费用为该段绳子的厚度。 求对于每种颜色,求在以某种方式将绳子折成长度为2的状态后这个颜色仍存在的情况下费用最小。 题解 感觉自己又斯波了。 最显然的一个性质:在开始修改一定不比在折了几段绳子后修改更劣(因为每个线段最多改一次颜色一定优)。 那那些才是最终合法的情况呢? 把绳子最...

0
0
发表了博客
2019/07/17 21:25

loj2335. 「JOI 2017 Final」足球

题意 几个人在足球场上踢球(笛卡尔坐标),要把球从一个点搞到另一个点。 可以通过传球,带球,无球跑动等方式实现传递(只能平行于坐标轴),不同的方式产生的疲劳值不同(和距离成不同的线性关系)。 要求最后所有人的疲劳值最小。 题解 观察几个性质: 1.一个人最多控一次球(至少进行了传球或者带球); 2.一个人的路线一定是:(无球跑动->)(带球->)传球/带球(带括号表示非必选项); 那么当一个球停在了位置$(x, y)...

0
0
发表了博客
2019/12/03 08:46

[LOJ#2743][DP]「JOI Open 2016」摩天大楼

题目传送门 DP 经典题 考虑从小到大把数加入排列内 如下图($A$ 已经经过排序): 我们考虑如上,在 $i$ ( $A_i$ )不断增大的过程中,维护上面直线 $y=A_i$ 之下的部分的长度之和 于是我们定义 DP :$f[i][j][k][h]$ 表示插入了前 $i$ 个数,分成 $j$ 段,$y=A_i$ 之下的部分长度之和为 $k$ ,并且选出了 $k$ ( $0/1/2$ )个边界(第 $1$ 个或第 $n$ 个)的方案数 注意这个 DP 中我们只需要保证每段是否在边界以及相邻两段之...

0
0
发表了博客
2019/03/27 17:18

使用class-validator替换Joi包的方法

## 前言 对每个接口的传入参数进行校验,是一个Web后端项目的必备功能,有一个npm包叫[Joi](https://github.com/hapijs/joi)可以很优雅的完成这个工作,比如这样子: ``` const schema = { userId: Joi.string() }; const {error, value} = Joi.validate({ userId: 'a string' }, schema); ``` 我们使用Typescript是希望得到明确的类型定义,减少出错的可能性。在一个后端项目中,给每个接口定义它的传入参数结构以及返回结果的...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
0 评论
3 收藏
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部