我正在寻找一种方法来验证数组是否包含使用joi所需的值。
在网上找到这些问题 - #1 , #2,但没有一个有明确的答案。
我尝试了几种东西,但它们似乎不起作用,例如:
joi.array().items(joi.string().allow('required-string').required()),
joi.array().items(joi.string().label('required-string').required()),
joi.array().items(joi.string().valid('required-string'))
这就是我想要实现的目标:
公认:
['required-string'], ['required-string', 'other'], ['other','required-string'], ['other',...,'required-string',....,'more-other']
Run Code Online (Sandbox Code Playgroud)
拒绝:
[], ['other'], [null], etc..
Run Code Online (Sandbox Code Playgroud) 我正在使用 hapi js 和 couchbase 开发 API。我正在使用 log4js 来记录错误。
{
// Add a user level
method: 'POST',
path: '/api/v1/userlevel',
config: {
handler: (request, reply) => {
const userlevel = new Userlevel(request.payload);
userlevel.save((err) =>{
if(err) {
return reply({
status: 400,
message: err.message
}).code(400);
// logger.error(err);
}
// logger.debug(reply);
return reply(userlevel).code(201);
});
},
validate: {
payload: {
group_id: Joi.string(),
name: Joi.string(),
status: Joi.string(),
index_id: Joi.number(),
device_id: Joi.string(),
created_at: Joi.string(),
updated_at: Joi.string(),
sys_version: Joi.string()
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我使用无效数据向此端点发送 POST 请求时,它显示错误
POST 请求 …
let obj = Joi.object().keys({
"id": Joi.string().required(),
"array": Joi.array().items(obj).required()//array contains multiple
});
Run Code Online (Sandbox Code Playgroud)
有什么方法可以在 JOI 中定义递归数组验证 obj.array 包含 n 个 obj
我有以下 JSON 结构:
{
key1: "value1",
key2: "value2",
transactions: [
{
receiverId: '12341',
senderId: '51634',
someOtherKey: 'value'
},
{
receiverId: '97561',
senderId: '46510',
someOtherKey: 'value'
}
]
}Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一些 Joi 代码来验证事务数组中的每个对象都是唯一的,即receiverId 和senderId 的组合只出现一次。交易数组中可以有可变数量的元素,但总是至少有 1 个。有什么想法吗?
我正在开发一个应该允许多个参数的 api,但对于其中三个我只想允许其中一个。每个键的值更容易,但我想知道 Joi 是否也允许它,或者我应该在我的服务器中添加额外的验证逻辑。
简而言之,对于 keys a,b或者c我想失败具有三个以上之一的任何请求,因此:
http://myapi.com/?a=value是一个有效的请求。
http://myapi.com/?b=value&c=value2是无效的。
谢谢!
假设我有以下架构:
var schema = {
fieldOne: Joi.string().required(),
fieldTwo: Joi.string().required()
};
Run Code Online (Sandbox Code Playgroud)
是否可以设置验证规则来检查两个字段是否具有不同的值?
我正在尝试与 Joi 进行验证,但遇到了无法实现的场景。我有一个对象。在某些情况下,对象会有一个 id(编辑),而在其他情况下它不会(创建)。
我想验证在“id”不存在的情况下,应该有几个其他字段。
到目前为止,我唯一有效的解决方案是当 id 为空并且根本没有丢失时。有没有办法匹配不存在的密钥,或者我应该将其更改为 null (有点 hacky)。
joi.object().keys({
id: joi
.number()
.min(0)
.allow(null),
someOtherField1: joi.when("id", { is: null, then: joi.required() })
});
Run Code Online (Sandbox Code Playgroud)
先感谢您!
存在具有时间属性的对象 (22:30:00)。
const schema = Joi.object.keys({
...
transactionDate: Joi.date().required(),
transactionTime: Joi.time().required(), // ???
...
});
Run Code Online (Sandbox Code Playgroud)
如何使用Joi?
管理员将创建用户,同时他将输入一些随机字符串作为密码。当管理员编辑现有用户时,除非他想更改密码,否则不需要输入任何密码。如果管理员没有输入任何密码,则将使用旧密码。
所以我想用它.when()来处理这种情况。当_id有效载荷中存在时(只有当用户存在时才可能),那么我们应该使密码字段可选,否则密码是必需的。
这是我的 Joi 验证
const usersJoiSchema = Joi.object({
_id: Joi.string().optional(),
firstName: Joi.string().required(),
lastName: Joi.string().required(),
email: Joi.string().required(),
password: Joi.string().when('_id', { is: Joi.exist(), then: Joi.optional(), otherwise: Joi.required() })
})
Run Code Online (Sandbox Code Playgroud)
.when在这种情况下,Joi 有一个方法。但出于某种奇怪的原因,它给了我
{"statusCode":500,"error":"Internal Server Error","message":"An internal server error occurred"}
Run Code Online (Sandbox Code Playgroud)
作为api的响应,服务器控制台中没有任何内容。我试图比较字符串长度,_id而不是,exists()我也尝试过
password: Joi.string().when('_id', { is: Joi.string().required(), then: Joi.string().optional(), otherwise: Joi.string().required() }),
password: Joi.string().when('_id', { is: Joi.string(), then: Joi.string().optional(), otherwise: Joi.string().required() }),
Run Code Online (Sandbox Code Playgroud)
对于密码密钥,但仍然是同样的问题。
如果有人对此问题有任何想法,请帮助我。
我需要验证这个对象:
{a: 'valueA', b: 'valueB'}
Run Code Online (Sandbox Code Playgroud)
为了验证“a”,我需要检查他的值(valueA)是否存在于我的数据库中。如果该值不存在,则该对象无效,否则有效。如何使用 Joi 验证器创建自定义 async/await 来实现此目的?