【发布时间】: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