Я хочу легко проверить ввод пользователя.
Когда я спрашиваю имя пользователя (например), он может взять тонны строк кода, чтобы действительно сделать его хорошо проверенным.
Я хочу что-то, что я могу использовать в интерфейсе и в конце - без изменения структуры проверки.
Мне нужна возможность бросать пользовательские подробные ошибки, что-то вроде этого:
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, чтобы легко и эффективно проверять ввод пользователя без потери времени - и все же сохранить его понятным для пользователя?
Вы можете использовать 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';
context
ключ?