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

时间:2016-02-18 18:33:03

标签: javascript joi

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

我似乎无法确认我的架构是否正确,因为我要求电子邮件或移动设备(但它们都不能为空/不存在) - 以下是正确的吗?

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

由于

1 个答案:

答案 0 :(得分:4)

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)

最终验证将失败,因为电子邮件和移动设备都不存在。