- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
好吧我放弃了...
如何使 selectorSettings
仅在 selectorStrategy
设置为 tournament
时显示?
selectorStrategy: joi.string().valid(['tournament', 'roulette']).default('tournament'),
selectorSettings: joi.any().when('selectorStrategy', {
is: 'tournament',
then: joi.object().keys({
tournamentSize: joi.number().integer().default(2),
baseWeight: joi.number().integer().default(1)
})
})
我在选项中设置了stripUnknown: true
。我的期望是,如果我通过:
selectorStrategy: 'roulette',
selectorSettings: { tournamentSize: 3 }
我会得到:
selectorStrategy: 'roulette'
如果我这样做:
selectorStrategy: 'tournament'
我会得到:
selectorStrategy: 'tournament',
selectorSettings: { tournamentSize: 2, baseWeight: 1 }
最佳答案
您需要设置 selectorSettings
默认值,并根据 selectorStrategy
的值有条件地将其删除。
让我们来看看您的两个用例。
const thing = {
selectorStrategy: 'roulette',
selectorSettings: { tournamentSize: 3 },
};
joi.validate(thing, schema, { stripUnknown: true} );
selectorSettings
不会被 stripUnknown
选项删除,因为该 key 不是未知的 - 它位于您的架构中。
我们需要根据 selectorStrategy
的值显式地将其删除:
.when('selectorStrategy', {
is: 'tournament',
otherwise: joi.strip(),
}),
const thing = {
selectorStrategy: 'tournament'
};
joi.validate(thing, schema);
代码并未为 selectorSettings
键本身设置默认值,仅设置其属性。由于不需要 selectorSettings,因此验证通过。
我们需要设置默认值:
selectorSettings: joi
.object()
.default({ tournamentSize: 2, baseWeight: 1 })
<小时/>
处理这两种情况的修改后的代码如下所示:
const joi = require('joi');
const schema = {
selectorStrategy: joi
.string()
.valid(['tournament', 'roulette'])
.default('tournament'),
selectorSettings: joi
.object()
.default({ tournamentSize: 2, baseWeight: 1 })
.keys({
tournamentSize: joi
.number()
.integer()
.default(2),
baseWeight: joi
.number()
.integer()
.default(1),
})
.when('selectorStrategy', {
is: 'tournament',
otherwise: joi.strip(),
}),
};
// should remove settings when not a tournament
var thing = {
selectorStrategy: 'roulette',
selectorSettings: { tournamentSize: 3 },
};
// returns
{
"selectorStrategy": "roulette"
}
.
// should insert default settings
var thing = {
selectorStrategy: 'tournament'
};
// returns
{
"selectorStrategy": "tournament",
"selectorSettings": {
"tournamentSize": 2,
"baseWeight": 1
}
}
.
// should add missing baseWeight default
var thing = {
selectorStrategy: 'tournament',
selectorSettings: { tournamentSize: 5 }
};
// returns
{
"selectorStrategy": "tournament",
"selectorSettings": {
"tournamentSize": 5,
"baseWeight": 1
}
}
关于node.js - 添加条件 Joi 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023850/
我有一个 api,在过去的开发中,它会接收逗号分隔的字符串作为有效输入,并使用以下内容作为验证器: Joi.string() 但现在我想使用这里提到的字符串数组来实现相同的变量 https://git
这是我的 Joi 模式 const createRoom = { body: { createdBy: Joi.string().required(), members: Joi.
我刚刚遇到了我必须处理的这行代码: Joi.array().label('Emails').items(Joi.string()).required() 我特别不明白 .label('Emails')
我有两个文件,一个是 api.js,另一个是 handler.js。对于模式处理,我正在使用庆祝模块 @hapi/joi On api.js I wrote only the API name On
let obj = Joi.object().keys({ "id": Joi.string().required(), "array": Joi.array().items
我想使用 Joi 验证对象,该对象不使用 Joi.ref() 和乘法运算。 var object = { a: 5, b: 6 } // this is wrong as Joi.re
我正在构建一个 JOI 扩展,如果他们在 JWT 范围内缺少某些角色,我可以将某些人列入黑名单,禁止他们发送某些 API 值。 到目前为止我已经这样做了: const Joi = require('j
我有一个场景,我需要根据所在国家/地区使用不同的正则表达式验证增值税号。因此,当字段 language 为 SE 时,我想使用此正则表达式 /^\d{6}-\d{4}$/字段 company.vatN
根据 Joi 文档,您可以像这样使用 Joi.object(): const object = Joi.object({ a: Joi.number().min(1).max(10).inte
joi.string().valid(['foo', 'bar']) 已弃用。 Error: Method no longer accepts array arguments: allow 实现这一目
我如何使用 Joi 来验证替换字段具有零个或多个键/值对?并且每个键都是一个字符串,每个值都是一个字符串、数字或 bool ? "substitutions": { "somekey": "s
我有一个复杂的验证,它根据 JSON 中的 a 值而变化。 { type: 'a', thing: 1, foo: 'abc' } { type: 'b', thing: 2, bar: 123 }
我有一个这样的嵌套模式设置: var schema = Joi.object().keys({ first_name: Joi.string().required(), last_name:
我目前在我的应用程序中有以下架构: Joi.object().keys({ users: Joi.array().items(mySchema) }) 所以我可以获得一组用户并验证它们。但现在我需
您好,我正在使用 "@hapi/joi": "^15.1.1"。很遗憾,我现在无法更新到最新的 Joi 版本。 这是我的验证模式 const schema = { name: Joi.str
我正在尝试验证一个架构,该架构与其他字段一起具有一系列自引用对象,如下所示: export const answer = answerModel.concat(Joi.object().keys({
我在 Joi 验证方面遇到了一个问题(或者我认为是一个问题)。如果它作为请求正文的一部分传递,我正在尝试为不存在的键分配一个值。 例如: parameters: Joi.object().keys({
我想为 populatedString 创建自定义 Joi 类型,方法是使用 .extend(..) 创建一个基于 joi.string() 的类型 其中: trim 字符串 如果 trimmed s
我必须逐个验证值,而不是为多个值传入整个架构。基于此处的单值验证文档 https://hapi.dev/module/joi/ 和这个示例代码 const validator: AnySchema =
我尝试使用 Joi.alternatives.try() 创建一个 Joi 模式.这是我尝试过的模式。 Joi.alternatives().try(Joi.object({ type: Jo
我是一名优秀的程序员,十分优秀!