【问题标题】:Node.JS - @hapi/joi - any.when() - not able to add .validate() at the "then condition"Node.JS - @hapi/joi - any.when() - 无法在“then 条件”处添加 .validate()
【发布时间】:2020-07-23 21:15:06
【问题描述】:

我无法设置它按预期工作的 joi-schema...

这是我尝试做的:

  • 'role' 是一个数组,可以包含字符串形式的项目。允许任何值。
  • 但当 'internal' 设置为 'true' 时,仅允许 'role' 中的某些值。

这是代码,它没有按预期工作

let Joi = require("@hapi/joi");

const schema = Joi.object({
   internal: Joi.boolean(),
   role: 
     Joi.array()
      .items(Joi.string().trim())
      .required()

      // the when condition is not replacing properly
      .when('internal', {
        is: true,
        then: Joi.array()
          .items(Joi.string().valid("Admin"))
          .required()
  }),
});

console.log(schema.validate({role: ["Any Role"]})) // OK
console.log(schema.validate({internal: false, role: ["Any role allowed"]})) // OK

console.log(schema.validate({internal: true, role: ["WRONG"]})) // FAIL, should have thrown error

...虽然替换数组函数本身可以正常工作:

const passingschema = Joi.object({
  role: Joi.array()
  .items(Joi.string().valid("Admin"))
  .required()
})

console.log(passingschema.validate({role: ["Admin"]})) // OK
console.log(passingschema.validate({role: ["WRONG"]})) // OK - throws error as expected
});

请告诉我,一旦 internal 设置为 true,如何相应地替换角色验证。

【问题讨论】:

    标签: javascript node.js joi


    【解决方案1】:

    也许可以在文档中尝试is: valid(true).required(),它说您需要is 上的 required() 才能完成这项工作。

    【讨论】:

    • 我可能不明白你的意思,但是根据any.when() doc example ``` const schema = Joi.object({ a: Joi.boolean().required(), b: Joi. object() .keys({ c: Joi.string(), d: Joi.number().required() }) .required() .when('a', { is: true, then: Joi.object( { c: Joi.required() } }) }) ``` 只有is: true,
    【解决方案2】:

    根据这个link,解决办法是这样的:

    Joi.array().required()
       .when('internal', {
           is: true,
           then: Joi.array().items(Joi.string().valid("Admin")),
           otherwise: Joi.array().items(Joi.string())
       })
    

    【讨论】:

      猜你喜欢
      • 2020-03-10
      • 2018-06-09
      • 2018-06-25
      • 2018-09-24
      • 2013-10-19
      • 1970-01-01
      • 2019-10-10
      • 2020-05-30
      • 2018-05-25
      相关资源
      最近更新 更多