#joi
#joi
Вопрос:
Тело моего запроса содержит объект Javascript / JSON:
{ id: 1, value: "example 1"}
У меня есть список разрешенных объектов:
[
{ id: 1, value: "example 1" } ,
{ id: 2, value: "example 2" } ,
{ id: 3, value: "example 3" } ,
]
Я пишу схему Joi и хотел бы подтвердить, что объект в теле запроса находится в моем списке разрешенных значений.
Ответ №1:
Вам нужно использовать any.custom()
свойство Joi: https://joi.dev/api/?v=17.2.1#anycustommethod-description. Вам понадобится функция, аналогичная
const _ = require('lodash');
const allowed = [
{ id: 1, value: 'value 1' } ,
...
{ id: 9, value: 'value 9' },
];
function isOneOf(allowedValues) {
return (v, helpers) => {
if ( ! _.some(allowedValues, x => _.isEqual(x,v) ) {
return helpers.error('naughty!');
}
};
}
который вы должны иметь возможность использовать в соответствии с:
...any().custom( isOneOf(allowedValues) );
Ответ №2:
я предполагаю, что идентификатор в массиве уникален
yourObj = {id:1,value: "example 1"};
yourArray = [{id:1,value: "example 1"},{id:2,value: "example 2"},{id:3,value: "example 3"}]
isObjectAvailable = yourArray.some(el=>el.id===yourObj.id)
console.log(isObjectAvailable) // return true if found else false
Комментарии:
1. то есть вы имеете в виду, что мне нужно добавить пользовательскую проверку?
Ответ №3:
Допустим, вы хотите, чтобы ваша схема проверяла этот массив объектов.
const example = {
"id": 1,
"value": "example1"
};
Схема Joi должна быть
var validator = require('@hapi/joi');
const rules = validator.object().keys({
id: validator.number().required(),
value: validator.string().required()
})
Комментарии:
1. нет, объект должен присутствовать в заданном массиве, чтобы пройти проверку