Для любого имеющего проблему с
... сообщения не являются функцией
ошибки, необходимо установить joi
с npm install @hapi/joi
, и импорт ее с @hapi/joi
. Я сделал ошибку установки joi
без @hapi/
префикс, и это взяло меня некоторое время для нахождения ошибки.
Текущий путь (я лично нахожу его лучше), должен использовать .messages()
(или .prefs({messages})
).
const Joi = require('@hapi/joi');
const joiSchema = Joi.object({
a: Joi.string()
.min(2)
.max(10)
.required()
.messages({
'string.base': `"a" should be a type of 'text'`,
'string.empty': `"a" cannot be an empty field`,
'string.min': `"a" should have a minimum length of {#limit}`,
'any.required': `"a" is a required field`
})
});
const validationResult = joiSchema.validate({ a: 2 }, { abortEarly: false });
console.log(validationResult.error); // expecting ValidationError: "a" should be a type of 'text'
Использование .errors()
не рекомендовано только для обновления сообщения по умолчанию с пользовательским сообщением.
.prefs({ messages })
тщательно продуманный способ предоставить больше возможностей как предпочтения. Другие варианты для prefs выбраны непосредственно от опций .validate ()
Далее чтение: https://<час> github.com/hapijs/joi/issues/2158
Обновление: Я видел, что вышеупомянутое объяснение не удалось для некоторых людей, таким образом, я поднял некоторый код для тестирования себя. Проверьте его здесь: https://runkit.com/embed/fnfaq3j0z9l2
Также обновил фрагмент кода, совместно использованный ранее, чтобы иметь детали от включения пакета, к использованию, к вызову фактического метода проверки.