Hapi / Joi验证

时间:2018-04-13 21:42:20

标签: javascript node.js typescript hapijs

这些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');

2 个答案:

答案 0 :(得分:1)

取自hapijs API Reference

  

<强> 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