Joi Schema 应该包含一个字段或另一个

use*_*od2 4 javascript joi

我正在考虑使用 Joi 进行 api 验证。

我似乎无法确认我的架构是否正确,因为我希望需要电子邮件或手机(但它们都不能为空/不存在) - 以下是否正确?

var schemaForRegistration = Joi.object().keys({
      email: Joi.string().email(),
      mobile:Joi.number().integer()
}).without('email', 'mobile');
Run Code Online (Sandbox Code Playgroud)

谢谢

Adr*_*nch 14

这可能or()就是你所追求的。

尝试这个:

const Joi = require('joi')

const schema = Joi.object().keys({
    email: Joi.string().email(),
    mobile: Joi.number().integer()
}).or('email', 'mobile')

Joi.validate({ email: 'xxx@yyy.com', mobile: '999000999000' }, schema, console.log)
Joi.validate({ mobile: '999000999000' }, schema, console.log)
Joi.validate({ email: 'xxx@yyy.com' }, schema, console.log)
Joi.validate({}, schema, console.log)
Run Code Online (Sandbox Code Playgroud)

最终验证将失败,因为电子邮件和手机都不存在。

  • 我想你错过了一个“x”,它是 xor('email', 'mobile') (4认同)
  • 如果还有 5-6 个键,那么“或”将如何解决目的? (3认同)