在有其他选择的情况下进行Joi验证

时间:2018-09-20 19:20:55

标签: javascript json node.js validation joi

有一个具有三个键的对象

const abc = {
  customerId: '777',
  firstName: 'pqr'',
  lastName: 'xyz',
};

条件是,如果存在客户ID,则可以忽略名字和姓氏。否则,它们应该是最大长度为20的字符串。

const schema = Joi.object({
  customerId: Joi.string(),
  firstName: Joi.alternatives().when('customerId', {
    is: null,
    then: Joi.string(),
  }),
  lastName: Joi.alternatives().when('customerId', {
    is: null,
    then: Joi.string(),
  })
})
Joi.validate(abc, schema);

我在这里收到此错误

  

错误:{ValidationError:“ firstName”是不允许的       在Object.exports.process(/home/runner/node_modules/joi/lib/errors.js:

那么,如何实现呢?

2 个答案:

答案 0 :(得分:1)

您应该使用.or而不是when

这是一个正在运行的示例:https://repl.it/@amasad/joi

模式:

const schema = Joi.object({
  customerId: Joi.string(),
  firstName: Joi.string().max(20),
  lastName: Joi.string().max(20),
}).or('customerId', 'lastName')
  .or('customerId', 'firstName');

答案 1 :(得分:0)

那是因为您的架构寻找firstname而对象却拥有firstName。尝试不使用大写字母N

const abc = {
   customerId: '777',
   firstname: 'pqr',
   lastname: 'xyz'
};