这些with()和without()函数在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');
答案 0 :(得分:1)
<强>
object.with(key, peers)
强>每当需要存在其他密钥时 指定的键位于:
key
- 参考密钥。
peers
- 必需的对等密钥名称 与钥匙一起出现。peers
可以是单个字符串值或 字符串值数组。
翻译为您的示例,表示&#34;当密钥username
出现时,密钥birthyear
也必须存在&#34;。
object.without(key, peers)
无论何时禁止存在其他密钥 指定的位置:
key
- 参考密钥。
peers
- 禁用的对等密钥名称 不得与钥匙一起出现。peers
可以是单个字符串值 或字符串值数组。
翻译为您的示例,表示&#34;当密钥password
存在时,密钥access_token
也不允许出现&#34;。
答案 1 :(得分:0)
.with(keyA, keyB)
表示当keyA存在时,keyB必须存在。
您的架构示例没有充分利用.with()
,因为“username”是必需的键。然后你也可以要求“birthyear”。
.without(keyA, keyB)
表示当keyA存在时,keyB必须 NOT 。