Я хочу легко проверить ввод пользователя.
Когда я спрашиваю имя пользователя (например), может потребоваться множество строк кода, чтобы его действительно хорошо проверили.
Мне нужно что-то, что я могу использовать как во внешнем интерфейсе, так и в серверной части - без изменения структуры проверки.
Мне нужна возможность выдавать настраиваемые подробные ошибки, примерно так:
let schema = Joi.object.keys({
first_name: Joi.string("Required to be a string")
.noNumbers("Should not contain numbers")
.minlenth(2, "At least 2 chars")
.maxlength(10, "Maximum 10 chars")
.required("Required field"),
last_name: Joi.string("Required to be a string")
.noNumbers("Should not contain numbers")
.minlenth(2, "At least 2 chars")
.maxlength(10, "Maximum 10 chars")
.required("Required field"),
});
К сожалению, вышеперечисленное не работает - поскольку Joi так не работает.
Может быть, есть хороший валидатор схемы JSON, который бы легко и эффективно проверял вводимые пользователем данные, не теряя времени - и при этом сохраняя понятность для пользователя?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать JOI. В следующем примере я напрямую переопределяю ошибки:
return Joi.object()
.keys({
str: Joi.string()
.min(2)
.max(10)
.required()
.error(errors => errors.map((err) => {
const customMessage = ({
'string.min': 'override min',
'string.max': 'override max',
})[err.type];
if (customMessage) err.message = customMessage;
return err;
})),
});
Я рекомендую вам использовать функцию, учитывая, что сообщения об ошибках будут одинаковыми для всех запросов:
function customErrors(errors) {
return errors.map((err) => {
const customMessage = ({
'string.min': 'override min',
'string.max': 'override max',
})[err.type];
if (customMessage) err.message = customMessage;
return err;
});
}
return Joi.object()
.keys({
str: Joi.string()
.min(2)
.max(10)
.required()
.error(customErrors),
});
РЕДАКТИРОВАТЬ :
// This
const customMessage = ({
'string.min': 'override min',
'string.max': 'override max',
})[err.type];
if (customMessage) err.message = customMessage;
// Equals this
let customMessage = false;
if (err.type === 'string.min') customMessage = 'override min';
if (err.type === 'string.max') customMessage = 'override max';
if (customMessage) err.message = customMessage;
// Equals this
if (err.type === 'string.min') err.message = 'override min';
if (err.type === 'string.max') err.message = 'override max';
Вся имеющаяся у меня документация - это
Переменная customMessage использует функции ES6 для простой и быстрой замены if statement? Если тогда - как это называется?
Пока это просто отличный ответ. Я попробую и дам вам знать. Где найти полную ссылку на ключ
context?