【问题标题】:Hapi/Joi validationHapi/Joi 验证
【发布时间】:2018-09-24 07:34:18
【问题描述】:

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

【问题讨论】:

标签: javascript node.js typescript hapijs


【解决方案1】:

取自hapijs API Reference

object.with(key, peers)

无论何时都需要其他键的存在 指定的键出现在哪里:

key - 引用键。

peers - 必须的对等密钥名称 与键一起出现。 peers 可以是单个字符串值或 字符串值数组。

翻译成你的例子,意思是“当密钥 username 存在时,密钥 birthyear 也必须存在”。

object.without(key, peers)

在任何时候都禁止其他键的存在 指定的出现在哪里:

key - 引用键。

peers - 禁止的对等密钥名称 不得与 key 一起出现。 peers 可以是单个字符串值 或字符串值数组。

翻译成您的示例,意思是“当密钥 password 存在时,密钥 access_token 也不允许存在”。

【讨论】:

    【解决方案2】:

    .with(keyA, keyB) 表示当 keyA 存在时 keyB 必须存在。

    您的模式示例没有很好地使用.with(),因为“用户名”是必需的键。然后你也可以将“birthyear”设为必需。

    .without(keyA, keyB) 表示当 keyA 存在时 keyB 必须存在。

    【讨论】:

      猜你喜欢
      • 2013-10-19
      • 2019-10-10
      • 2020-05-30
      • 2018-05-25
      • 2018-07-25
      • 1970-01-01
      • 2018-06-25
      • 2015-04-29
      • 2015-07-01
      相关资源
      最近更新 更多