javascript - 如何在 joi 模式中运行自定义验证功能
问题描述
我想根据架构中没有的内容将字段设为必填或可选。例如,存储在全局范围内的东西。这是 Joi 模式:
first_name: Joi.string().min(2).max(10).regex(Regex.alphabeta, 'alphabeta').error(JoiCustomErrors)
如果为 1,如何使其first_name
成为必需some_global_scope_var
,否则,使其成为可选?
注意:some_global_scope_var
不是架构的一部分。
解决方案
$
使用字符访问全局范围
last_name
通常,您将访问不带前缀的相对属性。对于全局访问前缀你的变量$
。
完整的解决方案
const Joi = require('@hapi/joi');
global.app = {
someValue: 1,
};
const schema = Joi.object().keys({
first_name: Joi.string()
.min(2)
.max(10)
.when('$app.someValue', {
is: Joi.equal(1),
then: Joi.required(),
})
});
const value = {
first_name: 'a1300',
};
const result = schema.validate(value);
console.log(JSON.stringify(result.error, null, 2));
PS我省略了
regex(Regex.alphabeta, 'alphabeta').error(JoiCustomErrors)
推荐阅读
- javascript - 在使用 Axios 获取请求后,useState Hook 数组上的 console.log 记录了几次
- gsap - Barba 转换后刷新 GSAP ScrollTrigger
- curl - freebsd:非法变量名
- c++ - 如何将 .txt 获取的变量发送到类函数?
- apache - 当变量里面有斜杠时如何处理htaccess重写?
- javascript - javascript date.valueOf() 和 java date.getTime() 之间的区别
- c++ - string_view 到 const 引用字符串无效
- javascript - ASP Net Core3.1 AJAX 发送 NULL 到控制器
- flutter - Flutter BLoC 无法更新我的布尔值列表
- node.js - 如何在 Cpanel/Whm 上更改 nodejs CLI 版本