【问题标题】:Joi validation in case of alternatives在替代方案的情况下进行 Joi 验证
【发布时间】:2019-02-25 03:58:33
【问题描述】:

有一个对象有三个键

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);

这里出现这个错误

error: { ValidationError: "firstName" is not allowed 在 Object.exports.process (/home/runner/node_modules/joi/lib/errors.js:

那么,如何实现呢?

【问题讨论】:

    标签: javascript json node.js validation joi


    【解决方案1】:

    这是因为您的架构寻找 firstname 而您的对象却寻找 firstName。试试不用大写N

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

    【讨论】:

    • 这次更正后应该有不同的错误。你能检查一下吗? @Aayushi
    【解决方案2】:

    您应该使用.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');
    

    【讨论】:

    • 根据您的回答,它将是客户 ID 和姓氏或客户 ID 和名字。但是如果没有 customerid 的情况,那么 firstname 和 lastname 都应该存在。
    猜你喜欢
    • 2019-09-08
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 2022-01-08
    • 2022-06-12
    • 2014-02-24
    相关资源
    最近更新 更多